diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,32 @@
+# Change Log
+
+## Unreleased
+
+## 0.6.0 - 2017-05-31
+
+This contains breaking changes.
+
+* The deprecation notice on `readEventLogFromFile` has been retracted
+* The incremental API has been refactored
+
+The details are as follows:
+
+* Update bug tracker URL ([#10](https://github.com/haskell/ghc-events/pull/10))
+* New test for Eden events ([#11](https://github.com/haskell/ghc-events/pull/11))
+* Relax version bound for binary ([#15](https://github.com/haskell/ghc-events/pull/15))
+* Enable Travis CI ([#19](https://github.com/haskell/ghc-events/pull/19))
+* Refactor the incremental API which was introduced in 0.5.0.0 ([#22](https://github.com/haskell/ghc-events/pull/22))
+* Some speed/memory usage improvements ([#18](https://github.com/haskell/ghc-events/pull/18), [#22](https://github.com/haskell/ghc-events/pull/22))
+
+## 0.5.0.0 - unreleased
+
+* Readme added :)
+* Old parser replaced with an incremental implementation
+* General overhaul of the codebase
+* Partial Haddock coverage
+
+The 0.5.* releases should be able to handle large event logs and logs that have been cut off abruptly, e.g. from executable runs that resulted in crashes.
+
+This release should be *mostly* backwards compatible, however the "old" way of reading event logs, namely the `readEventLogFromFile`  function is now **deprecated**.
+
+**NOTE:** Users parsing large logs may notice that this version of the library is noticably slower than the older versions. The incremental parser is at fault here - previous versions of the libray used a "trick" that would let them essentially skip the first step of the mergesort algorithm since `EventBlock`s were already sorted in time order. The new parser reads the file incrementally and cannot take the advantage of this. Apologies for any inconvenience this may have caused.
diff --git a/GHC/RTS/EventLogFormat.h b/GHC/RTS/EventLogFormat.h
deleted file mode 100644
--- a/GHC/RTS/EventLogFormat.h
+++ /dev/null
@@ -1,312 +0,0 @@
-/* -----------------------------------------------------------------------------
- *
- * (c) The GHC Team, 2008-2012
- *
- * Event log format
- * 
- * The log format is designed to be extensible: old tools should be
- * able to parse (but not necessarily understand all of) new versions
- * of the format, and new tools will be able to understand old log
- * files.
- * 
- * Each event has a specific format.  If you add new events, give them
- * new numbers: we never re-use old event numbers.
- *
- * - The format is endian-independent: all values are represented in 
- *    bigendian order.
- *
- * - The format is extensible:
- *
- *    - The header describes each event type and its length.  Tools
- *      that don't recognise a particular event type can skip those events.
- *
- *    - There is room for extra information in the event type
- *      specification, which can be ignored by older tools.
- *
- *    - Events can have extra information added, but existing fields
- *      cannot be changed.  Tools should ignore extra fields at the
- *      end of the event record.
- *
- *    - Old event type ids are never re-used; just take a new identifier.
- *
- *
- * The format
- * ----------
- *
- * log : EVENT_HEADER_BEGIN
- *       EventType*
- *       EVENT_HEADER_END
- *       EVENT_DATA_BEGIN
- *       Event*
- *       EVENT_DATA_END
- *
- * EventType :
- *       EVENT_ET_BEGIN
- *       Word16         -- unique identifier for this event
- *       Int16          -- >=0  size of the event in bytes (minus the header)
- *                      -- -1   variable size
- *       Word32         -- length of the next field in bytes
- *       Word8*         -- string describing the event
- *       Word32         -- length of the next field in bytes
- *       Word8*         -- extra info (for future extensions)
- *       EVENT_ET_END
- *
- * Event : 
- *       Word16         -- event_type
- *       Word64         -- time (nanosecs)
- *       [Word16]       -- length of the rest (for variable-sized events only)
- *       ... extra event-specific info ...
- *
- *
- * To add a new event
- * ------------------
- *
- *  - In this file:
- *    - give it a new number, add a new #define EVENT_XXX below
- *  - In EventLog.c
- *    - add it to the EventDesc array
- *    - emit the event type in initEventLogging()
- *    - emit the new event in postEvent_()
- *    - generate the event itself by calling postEvent() somewhere
- *  - In the Haskell code to parse the event log file:
- *    - add types and code to read the new event
- *
- * -------------------------------------------------------------------------- */
-
-#ifndef RTS_EVENTLOGFORMAT_H
-#define RTS_EVENTLOGFORMAT_H
-
-/*
- * Markers for begin/end of the Header.
- */
-#define EVENT_HEADER_BEGIN    0x68647262 /* 'h' 'd' 'r' 'b' */
-#define EVENT_HEADER_END      0x68647265 /* 'h' 'd' 'r' 'e' */
-
-#define EVENT_DATA_BEGIN      0x64617462 /* 'd' 'a' 't' 'b' */
-#define EVENT_DATA_END        0xffff
-
-/*
- * Markers for begin/end of the list of Event Types in the Header.
- * Header, Event Type, Begin = hetb
- * Header, Event Type, End = hete
- */
-#define EVENT_HET_BEGIN       0x68657462 /* 'h' 'e' 't' 'b' */
-#define EVENT_HET_END         0x68657465 /* 'h' 'e' 't' 'e' */
-
-#define EVENT_ET_BEGIN        0x65746200 /* 'e' 't' 'b' 0 */
-#define EVENT_ET_END          0x65746500 /* 'e' 't' 'e' 0 */
-
-/*
- * Types of event
- */
-#define EVENT_CREATE_THREAD        0 /* (thread)               */
-#define EVENT_RUN_THREAD           1 /* (thread)               */
-#define EVENT_STOP_THREAD          2 /* (thread, status, blockinfo) */
-#define EVENT_THREAD_RUNNABLE      3 /* (thread)               */
-#define EVENT_MIGRATE_THREAD       4 /* (thread, new_cap)      */
-/* 5, 6, 7 deprecated */
-#define EVENT_THREAD_WAKEUP        8 /* (thread, other_cap)    */
-#define EVENT_GC_START             9 /* ()                     */
-#define EVENT_GC_END              10 /* ()                     */
-#define EVENT_REQUEST_SEQ_GC      11 /* ()                     */
-#define EVENT_REQUEST_PAR_GC      12 /* ()                     */
-/* 13, 14 deprecated */
-#define EVENT_CREATE_SPARK_THREAD 15 /* (spark_thread)         */
-#define EVENT_LOG_MSG             16 /* (message ...)          */
-/* EVENT_STARTUP should be deprecated at some point */
-#define EVENT_STARTUP             17 /* (num_capabilities)     */
-#define EVENT_BLOCK_MARKER        18 /* (size, end_time, capability) */
-#define EVENT_USER_MSG            19 /* (message ...)          */
-#define EVENT_GC_IDLE             20 /* () */
-#define EVENT_GC_WORK             21 /* () */
-#define EVENT_GC_DONE             22 /* () */
-/* 23, 24 used by eden */
-#define EVENT_CAPSET_CREATE       25 /* (capset, capset_type)  */
-#define EVENT_CAPSET_DELETE       26 /* (capset)               */
-#define EVENT_CAPSET_ASSIGN_CAP   27 /* (capset, cap)          */
-#define EVENT_CAPSET_REMOVE_CAP   28 /* (capset, cap)          */
-/* the RTS identifier is in the form of "GHC-version rts_way"  */
-#define EVENT_RTS_IDENTIFIER      29 /* (capset, name_version_string) */
-/* the vectors in these events are null separated strings             */
-#define EVENT_PROGRAM_ARGS        30 /* (capset, commandline_vector)  */
-#define EVENT_PROGRAM_ENV         31 /* (capset, environment_vector)  */
-#define EVENT_OSPROCESS_PID       32 /* (capset, pid)          */
-#define EVENT_OSPROCESS_PPID      33 /* (capset, parent_pid)   */
-#define EVENT_SPARK_COUNTERS      34 /* (crt,dud,ovf,cnv,gcd,fiz,rem) */
-#define EVENT_SPARK_CREATE        35 /* ()                     */
-#define EVENT_SPARK_DUD           36 /* ()                     */
-#define EVENT_SPARK_OVERFLOW      37 /* ()                     */
-#define EVENT_SPARK_RUN           38 /* ()                     */
-#define EVENT_SPARK_STEAL         39 /* (victim_cap)           */
-#define EVENT_SPARK_FIZZLE        40 /* ()                     */
-#define EVENT_SPARK_GC            41 /* ()                     */
-#define EVENT_INTERN_STRING       42 /* (string, id) {not used by ghc} */
-#define EVENT_WALL_CLOCK_TIME     43 /* (capset, unix_epoch_seconds, nanoseconds) */
-#define EVENT_THREAD_LABEL        44 /* (thread, name_string)  */
-#define EVENT_CAP_CREATE          45 /* (cap)                  */
-#define EVENT_CAP_DELETE          46 /* (cap)                  */
-#define EVENT_CAP_DISABLE         47 /* (cap)                  */
-#define EVENT_CAP_ENABLE          48 /* (cap)                  */
-#define EVENT_HEAP_ALLOCATED      49 /* (heap_capset, alloc_bytes) */
-#define EVENT_HEAP_SIZE           50 /* (heap_capset, size_bytes) */
-#define EVENT_HEAP_LIVE           51 /* (heap_capset, live_bytes) */
-#define EVENT_HEAP_INFO_GHC       52 /* (heap_capset, n_generations,
-                                         max_heap_size, alloc_area_size,
-                                         mblock_size, block_size) */
-#define EVENT_GC_STATS_GHC        53 /* (heap_capset, generation,
-                                         copied_bytes, slop_bytes, frag_bytes,
-                                         par_n_threads,
-                                         par_max_copied, par_tot_copied) */
-#define EVENT_GC_GLOBAL_SYNC      54 /* ()                     */
-#define EVENT_TASK_CREATE         55 /* (taskID, cap, tid)       */
-#define EVENT_TASK_MIGRATE        56 /* (taskID, cap, new_cap)   */
-#define EVENT_TASK_DELETE         57 /* (taskID)                 */
-#define EVENT_USER_MARKER         58 /* (marker_name) */
-#define EVENT_HACK_BUG_T9003      59 /* Hack: see trac #9003 */
-
-/* Range 59 - 59 is available for new GHC and common events. */
-
-/* Range 60 - 80 is used by eden for parallel tracing
- * see http://www.mathematik.uni-marburg.de/~eden/
- */
-
-/* these are used by eden but are replaced by new alternatives for ghc */
-#define EVENT_VERSION                   23 /* (version_string) */
-#define EVENT_PROGRAM_INVOCATION        24 /* (commandline_string) */
-
-/* start of parallel trace events */
-#define EVENT_EDEN_START_RECEIVE         60 /* () */
-#define EVENT_EDEN_END_RECEIVE           61 /* () */
-#define EVENT_CREATE_PROCESS             62 /* (process) */
-#define EVENT_KILL_PROCESS               63 /* (process) */
-#define EVENT_ASSIGN_THREAD_TO_PROCESS   64 /* (thread, process) */
-#define EVENT_CREATE_MACHINE             65 /* (machine, startupTime(in 10^-8 seconds after 19xx)) */
-#define EVENT_KILL_MACHINE               66 /* (machine) */
-#define EVENT_SEND_MESSAGE               67 /* (tag, sender_process, sender_thread, receiver_machine, receiver_process, receiver_inport) */
-#define EVENT_RECEIVE_MESSAGE            68 /* (tag, receiver_process, receiver_inport, sender_machine, sender_process, sender_outport, message_size) */
-#define EVENT_SEND_RECEIVE_LOCAL_MESSAGE 69 /* (tag, sender_process, sender_thread, receiver_process, receiver_inport) */
-
-
-/* Range 100 - 139 is reserved for Mercury, see below. */
-
-/* Range 140 - 159 is reserved for Perf events, see below. */
-
-/*
- * The highest event code +1 that ghc itself emits. Note that some event
- * ranges higher than this are reserved but not currently emitted by ghc.
- * This must match the size of the EventDesc[] array in EventLog.c
- */
-#define NUM_GHC_EVENT_TAGS        70
-
-
-/* DEPRECATED EVENTS: */
-/* These two are deprecated because we don't need to record the thread, it's
-   implicit. We have to keep these #defines because for tiresome reasons we
-   still need to parse them, see GHC.RTS.Events.ghc6Parsers for details. */
-#define EVENT_RUN_SPARK            5 /* (thread)               */
-#define EVENT_STEAL_SPARK          6 /* (thread, victim_cap)   */
-/* shutdown replaced by EVENT_CAP_DELETE */
-#define EVENT_SHUTDOWN             7 /* ()                     */
-#if 0
-/* ghc changed how it handles sparks so these are no longer applicable */
-#define EVENT_CREATE_SPARK        13 /* (cap, thread) */
-#define EVENT_SPARK_TO_THREAD     14 /* (cap, thread, spark_thread) */
-#endif
-
-
-/*
- * These event types are Mercury specific, Mercury may use up to event number
- * 139
- */
-#define EVENT_FIRST_MER_EVENT       100
-#define NUM_MER_EVENTS               14
-
-#define EVENT_MER_START_PAR_CONJUNCTION 100 /* (dyn id, static id) */
-#define EVENT_MER_STOP_PAR_CONJUNCTION  101 /* (dyn id) */
-#define EVENT_MER_STOP_PAR_CONJUNCT     102 /* (dyn id) */
-#define EVENT_MER_CREATE_SPARK          103 /* (dyn id, spark id) */
-#define EVENT_MER_FUT_CREATE            104 /* (fut id, memo'd name id) */
-#define EVENT_MER_FUT_WAIT_NOSUSPEND    105 /* (fut id) */
-#define EVENT_MER_FUT_WAIT_SUSPENDED    106 /* (fut id) */
-#define EVENT_MER_FUT_SIGNAL            107 /* (fut id) */
-#define EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT \
-                                        108 /* () */
-#define EVENT_MER_WORK_STEALING         109 /* () */
-#define EVENT_MER_LOOKING_FOR_LOCAL_SPARK \
-                                        112 /* () */
-#define EVENT_MER_RELEASE_CONTEXT       110 /* (context id) */
-#define EVENT_MER_ENGINE_SLEEPING       111 /* () */
-#define EVENT_MER_CALLING_MAIN          113 /* () */
-
-
-/*
- * These event types are parsed from hardware performance counters logs,
- * such as the Linux Performance Counters data available through
- * the perf subsystem.
- */
-
-#define EVENT_PERF_NAME           140 /* (perf_num, name) */
-#define EVENT_PERF_COUNTER        141 /* (perf_num, tid, period) */
-#define EVENT_PERF_TRACEPOINT     142 /* (perf_num, tid) */
-
-
-/*
- * Status values for EVENT_STOP_THREAD
- *
- * 1-5 are the StgRun return values (from includes/rts/Constants.h):
- *
- * #define HeapOverflow   1
- * #define StackOverflow  2
- * #define ThreadYielding 3
- * #define ThreadBlocked  4
- * #define ThreadFinished 5
- * #define ForeignCall                  6
- * #define BlockedOnMVar                7
- * #define BlockedOnMVarRead            20
- * NOTE: in GHC-7.8.2, this was 8, and following states shifted one up
- * #define BlockedOnBlackHole           8
- * #define BlockedOnRead                9
- * #define BlockedOnWrite               10
- * #define BlockedOnDelay               11
- * #define BlockedOnSTM                 12
- * #define BlockedOnDoProc              13
- * NOTE: unused GUM states 8, 9 (here: 14,15) in rts/Constants.h
- * #define BlockedOnCCall               -- not used (see ForeignCall)
- * #define BlockedOnCCall_NoUnblockExc  -- not used (see ForeignCall)
- * #define BlockedOnMsgThrowTo          16
- * NOTE: 16 because unused GUM states ignored in ghc-events lib
- *       Otherwise it would be 18, following would be 19, 20
- * TODO: verify the above is what GHC does (16/17 could be 18/19) 
- * #define ThreadMigrating              17
- * #define BlockedOnMsgGlobalise        18 
- * NOTE: not present in GHC. Mercury-Event?
- */
-#define THREAD_SUSPENDED_FOREIGN_CALL 6
-
-/*
- * Capset type values for EVENT_CAPSET_CREATE
- */
-#define CAPSET_TYPE_CUSTOM      1  /* reserved for end-user applications */
-#define CAPSET_TYPE_OSPROCESS   2  /* caps belong to the same OS process */
-#define CAPSET_TYPE_CLOCKDOMAIN 3  /* caps share a local clock/time      */
-
-#ifndef EVENTLOG_CONSTANTS_ONLY
-
-typedef StgWord16 EventTypeNum;
-typedef StgWord64 EventTimestamp; /* in nanoseconds */
-typedef StgWord32 EventThreadID;
-typedef StgWord16 EventCapNo;
-typedef StgWord16 EventPayloadSize; /* variable-size events */
-typedef StgWord16 EventThreadStatus; /* status for EVENT_STOP_THREAD */
-typedef StgWord32 EventCapsetID;
-typedef StgWord16 EventCapsetType;   /* types for EVENT_CAPSET_CREATE */
-typedef StgWord64 EventTaskId;         /* for EVENT_TASK_* */
-typedef StgWord64 EventKernelThreadId; /* for EVENT_TASK_CREATE */
-
-typedef StgWord32 EventProcessID;
-typedef StgWord16 EventMachineID;
-typedef EventThreadID EventPortID;
-
-#endif
-
-#endif /* RTS_EVENTLOGFORMAT_H */
diff --git a/GHC/RTS/EventParserUtils.hs b/GHC/RTS/EventParserUtils.hs
deleted file mode 100644
--- a/GHC/RTS/EventParserUtils.hs
+++ /dev/null
@@ -1,199 +0,0 @@
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
-
-module GHC.RTS.EventParserUtils (
-        EventParser(..),
-        EventParsers(..),
-        GetEvents,
-        GetHeader,
-
-        getE,
-        getH,
-        getString,
-        mkEventTypeParsers,
-        simpleEvent,
-        skip,
-    ) where
-
-import Control.Monad
-import Control.Monad.Except
-import Control.Monad.Reader
-import Data.Array
-import Data.Binary
-import Data.Binary.Get hiding (skip)
-import qualified Data.Binary.Get as G
-import Data.Binary.Put
-import Data.Char
-import Data.Function
-import Data.IntMap (IntMap)
-import qualified Data.IntMap as M
-import Data.List
-
-#define EVENTLOG_CONSTANTS_ONLY
-#include "EventLogFormat.h"
-
-import GHC.RTS.EventTypes
-
--- reader/Get monad that passes around the event types
-type GetEvents a = ReaderT EventParsers (ExceptT String Get) a
-
-newtype EventParsers = EventParsers (Array Int (GetEvents EventInfo))
-
-type GetHeader a = ExceptT String Get a
-
-getH :: Binary a => GetHeader a
-getH = lift get
-
-getE :: Binary a => GetEvents a
-getE = lift $ lift get
-
-nBytes :: Integral a => a -> GetEvents [Word8]
-nBytes n = replicateM (fromIntegral n) getE
-
-getString :: Integral a => a -> GetEvents String
-getString len = do
-    bytes <- nBytes len
-    return $ map (chr . fromIntegral) bytes
-
-skip :: Integral a => a -> GetEvents ()
-skip n = lift $ lift $ G.skip (fromIntegral n)
-
---
--- Code to build the event parser table.
---
-
---
--- Event parser data.  Parsers are either fixed or vairable size.
---
-data EventParser a
-    = FixedSizeParser {
-        fsp_type        :: Int,
-        fsp_size        :: EventTypeSize,
-        fsp_parser      :: GetEvents a
-    }
-    | VariableSizeParser {
-        vsp_type        :: Int,
-        vsp_parser      :: GetEvents a
-    }
-
-get_parser (FixedSizeParser _ _ p) = p
-get_parser (VariableSizeParser _ p) = p
-
-get_type (FixedSizeParser t _ _) = t
-get_type (VariableSizeParser t _) = t
-
-isFixedSize (FixedSizeParser {}) = True
-isFixedSize (VariableSizeParser {}) = False
-
-simpleEvent :: Int -> a -> EventParser a
-simpleEvent t p = FixedSizeParser t 0 (return p)
-
--- Our event log format allows new fields to be added to events over
--- time.  This means that our parser must be able to handle:
---
---  * old versions of an event, with fewer fields than expected,
---  * new versions of an event, with more fields than expected
---
--- The event log file declares the size for each event type, so we can
--- select the correct parser for the event type based on its size.  We
--- do this once after parsing the header: given the EventTypes, we build
--- an array of event parsers indexed by event type.
---
--- For each event type, we may have multiple parsers for different
--- versions of the event, indexed by size.  These are listed in the
--- eventTypeParsers list below.  For the given log file we select the
--- parser for the most recent version (largest size less than the size
--- declared in the header).  If this is a newer version of the event
--- than we understand, there may be extra bytes that we have to read
--- and discard in the parser for this event type.
---
--- Summary:
---   if size is smaller that we expect:
---     parse the earier version, or ignore the event
---   if size is just right:
---     parse it
---   if size is too big:
---     parse the bits we understand and discard the rest
-
-mkEventTypeParsers :: IntMap EventType
-                   -> [EventParser EventInfo]
-                   -> Array Int (GetEvents EventInfo)
-mkEventTypeParsers etypes event_parsers
- = accumArray (flip const) undefined (0, max_event_num)
-    [ (num, parser num) | num <- [0..max_event_num] ]
-    --([ (num, undeclared_etype num) | num <- [0..max_event_num] ] ++
-    -- [ (num, parser num etype) | (num, etype) <- M.toList etypes ])
-  where
-    max_event_num = maximum (M.keys etypes)
-    undeclared_etype num = throwError ("undeclared event type: " ++ show num)
-    parser_map = makeParserMap event_parsers
-    parser num =
-            -- Get the event's size from the header,
-            -- the first Maybe describes whether the event was declared in the header.
-            -- the second Maybe selects between variable and fixed size events.
-        let mb_mb_et_size = do et <- M.lookup num etypes
-                               return $ size et
-            -- Find a parser for the event with the given size.
-            maybe_parser mb_et_size = do possible <- M.lookup num parser_map
-                                         best_parser <- case mb_et_size of
-                                            Nothing -> getVariableParser possible
-                                            Just et_size -> getFixedParser et_size possible
-                                         return $ get_parser best_parser
-            in case mb_mb_et_size of
-                -- This event is declared in the log file's header
-                Just mb_et_size -> case maybe_parser mb_et_size of
-                    -- And we have a valid parser for it.
-                    Just p -> p
-                    -- But we don't have a valid parser for it.
-                    Nothing -> noEventTypeParser num mb_et_size
-                -- This event is not declared in the log file's header
-                Nothing -> undeclared_etype num
-
--- Find the first variable length parser.
-getVariableParser :: [EventParser a] -> Maybe (EventParser a)
-getVariableParser [] = Nothing
-getVariableParser (x:xs) = case x of
-    FixedSizeParser _ _ _ -> getVariableParser xs
-    VariableSizeParser _ _ -> Just x
-
--- Find the best fixed size parser, that is to say, the parser for the largest
--- event that does not exceed the size of the event as declared in the log
--- file's header.
-getFixedParser :: EventTypeSize -> [EventParser a] -> Maybe (EventParser a)
-getFixedParser size parsers =
-        do parser <- ((filter isFixedSize) `pipe`
-                      (filter (\x -> (fsp_size x) <= size)) `pipe`
-                      (sortBy descending_size) `pipe`
-                      maybe_head) parsers
-           return $ padParser size parser
-    where pipe f g = g . f
-          descending_size (FixedSizeParser _ s1 _) (FixedSizeParser _ s2 _) =
-            compare s2 s1
-          descending_size _ _ = undefined
-          maybe_head [] = Nothing
-          maybe_head (x:xs) = Just x
-
-padParser :: EventTypeSize -> (EventParser a) -> (EventParser a)
-padParser size (VariableSizeParser t p) = VariableSizeParser t p
-padParser size (FixedSizeParser t orig_size orig_p) = FixedSizeParser t size p
-    where p = if (size == orig_size)
-                then orig_p
-                else do d <- orig_p
-                        skip (size - orig_size)
-                        return d
-
-makeParserMap :: [EventParser a] -> IntMap [EventParser a]
-makeParserMap = foldl buildParserMap M.empty
-    where buildParserMap map parser = M.alter (addParser parser) (get_type parser) map
-          addParser p Nothing = Just [p]
-          addParser p (Just ps) = Just (p:ps)
-
-noEventTypeParser :: Int -> Maybe EventTypeSize
-                  -> GetEvents EventInfo
-noEventTypeParser num mb_size = do
-  bytes <- case mb_size of
-             Just n  -> return n
-             Nothing -> getE :: GetEvents Word16
-  skip bytes
-  return UnknownEvent{ ref = fromIntegral num }
diff --git a/GHC/RTS/EventTypes.hs b/GHC/RTS/EventTypes.hs
deleted file mode 100644
--- a/GHC/RTS/EventTypes.hs
+++ /dev/null
@@ -1,513 +0,0 @@
-{-# OPTIONS_GHC -fwarn-incomplete-patterns #-}
-
-module GHC.RTS.EventTypes where
-
-import Data.Word (Word8, Word16, Word32, Word64)
-import Data.Binary
-
--- EventType.
-type EventTypeNum = Word16
-type EventTypeDescLen = Word32
-type EventTypeDesc = String
-type EventTypeSize = Word16
--- Event.
-type EventDescription = String
-type Timestamp = Word64
-type ThreadId = Word32
-type CapNo = Word16
-type Marker = Word32
-type BlockSize = Word32
-type RawThreadStopStatus = Word16
-type StringId = Word32
-type Capset   = Word32
-type PerfEventTypeNum = Word32
-type TaskId = Word64
-type PID = Word32
-
-newtype KernelThreadId = KernelThreadId { kernelThreadId :: Word64 }
-  deriving (Eq, Ord, Show)
-instance Binary KernelThreadId where
-  put (KernelThreadId tid) = put tid
-  get = fmap KernelThreadId get
-
--- Types for Parallel-RTS Extension
-type ProcessId = Word32
-type MachineId = Word16
-type PortId = ThreadId
-type MessageSize = Word32
-type RawMsgTag = Word8
-
--- These types are used by Mercury events.
-type ParConjDynId = Word64
-type ParConjStaticId = StringId
-type SparkId = Word32
-type FutureId = Word64
-
-sz_event_type_num :: EventTypeSize
-sz_event_type_num = 2
-sz_cap :: EventTypeSize
-sz_cap  = 2
-sz_time :: EventTypeSize
-sz_time = 8
-sz_tid :: EventTypeSize
-sz_tid  = 4
-sz_old_tid :: EventTypeSize
-sz_old_tid  = 8 -- GHC 6.12 was using 8 for ThreadID when declaring the size
-                -- of events, but was actually using 32 bits for ThreadIDs
-sz_capset :: EventTypeSize
-sz_capset = 4
-sz_capset_type :: EventTypeSize
-sz_capset_type = 2
-sz_block_size :: EventTypeSize
-sz_block_size = 4
-sz_block_event :: EventTypeSize
-sz_block_event = fromIntegral (sz_event_type_num + sz_time + sz_block_size
-    + sz_time + sz_cap)
-sz_pid :: EventTypeSize
-sz_pid = 4
-sz_taskid :: EventTypeSize
-sz_taskid = 8
-sz_kernel_tid :: EventTypeSize
-sz_kernel_tid = 8
-sz_th_stop_status :: EventTypeSize
-sz_th_stop_status = 2
-sz_string_id :: EventTypeSize
-sz_string_id = 4
-sz_perf_num :: EventTypeSize
-sz_perf_num = 4
-
--- Sizes for Parallel-RTS event fields
-sz_procid, sz_mid, sz_mes, sz_realtime, sz_msgtag :: EventTypeSize
-sz_procid  = 4
-sz_mid  = 2
-sz_mes  = 4
-sz_realtime = 8
-sz_msgtag  = 1
-
--- Sizes for Mercury event fields.
-sz_par_conj_dyn_id :: EventTypeSize
-sz_par_conj_dyn_id = 8
-sz_par_conj_static_id :: EventTypeSize
-sz_par_conj_static_id = sz_string_id
-sz_spark_id :: EventTypeSize
-sz_spark_id = 4
-sz_future_id :: EventTypeSize
-sz_future_id = 8
-
-{-
- - Data type delcarations to build the GHC RTS data format,
- - which is a (header, data) pair.
- -
- - Header contains EventTypes.
- - Data contains Events.
- -}
-data EventLog =
-  EventLog {
-    header :: Header,
-    dat    :: Data
-  } deriving Show
-
-newtype Header = Header {
-     eventTypes :: [EventType]
-  } deriving (Show, Eq)
-
-data Data = Data {
-     events :: [Event]
-  } deriving Show
-
-data EventType =
-  EventType {
-    num  :: EventTypeNum,
-    desc :: EventTypeDesc,
-    size :: Maybe EventTypeSize -- ^ 'Nothing' indicates variable size
-  } deriving (Show, Eq)
-
-data Event =
-  Event {
-    time :: {-# UNPACK #-}!Timestamp,
-    spec :: EventInfo
-  } deriving Show
-
-data EventInfo
-
-  -- pseudo events
-  = EventBlock         { end_time     :: Timestamp,
-                         cap          :: Int,
-                         block_events :: [Event]
-                       }
-  | UnknownEvent       { ref  :: {-# UNPACK #-}!EventTypeNum }
-
-  -- init and shutdown
-  | Startup            { n_caps :: Int
-                       }
-  -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6+
-  -- no longer generate the event; should be removed at some point
-  | Shutdown           { }
-
-  -- thread scheduling
-  | CreateThread       { thread :: {-# UNPACK #-}!ThreadId
-                       }
-  | RunThread          { thread :: {-# UNPACK #-}!ThreadId
-                       }
-  | StopThread         { thread :: {-# UNPACK #-}!ThreadId,
-                         status :: ThreadStopStatus
-                       }
-  | ThreadRunnable     { thread :: {-# UNPACK #-}!ThreadId
-                       }
-  | MigrateThread      { thread :: {-# UNPACK #-}!ThreadId,
-                         newCap :: {-# UNPACK #-}!Int
-                       }
-  | WakeupThread       { thread :: {-# UNPACK #-}!ThreadId,
-                         otherCap :: {-# UNPACK #-}!Int
-                       }
-  | ThreadLabel        { thread :: {-# UNPACK #-}!ThreadId,
-                         threadlabel :: String
-                       }
-
-  -- par sparks
-  | CreateSparkThread  { sparkThread :: {-# UNPACK #-}!ThreadId
-                       }
-  | SparkCounters      { sparksCreated, sparksDud, sparksOverflowed,
-                         sparksConverted, sparksFizzled, sparksGCd,
-                         sparksRemaining :: {-# UNPACK #-}! Word64
-                       }
-  | SparkCreate        { }
-  | SparkDud           { }
-  | SparkOverflow      { }
-  | SparkRun           { }
-  | SparkSteal         { victimCap :: {-# UNPACK #-}!Int }
-  | SparkFizzle        { }
-  | SparkGC            { }
-
-  -- tasks
-  | TaskCreate         { taskId :: TaskId,
-                         cap :: {-# UNPACK #-}!Int,
-                         tid :: {-# UNPACK #-}!KernelThreadId
-                       }
-  | TaskMigrate        { taskId :: TaskId,
-                         cap :: {-# UNPACK #-}!Int,
-                         new_cap :: {-# UNPACK #-}!Int
-                       }
-  | TaskDelete         { taskId :: TaskId }
-
-  -- garbage collection
-  | RequestSeqGC       { }
-  | RequestParGC       { }
-  | StartGC            { }
-  | GCWork             { }
-  | GCIdle             { }
-  | GCDone             { }
-  | EndGC              { }
-  | GlobalSyncGC       { }
-  | GCStatsGHC         { heapCapset   :: {-# UNPACK #-}!Capset
-                       , gen          :: {-# UNPACK #-}!Int
-                       , copied       :: {-# UNPACK #-}!Word64
-                       , slop, frag   :: {-# UNPACK #-}!Word64
-                       , parNThreads  :: {-# UNPACK #-}!Int
-                       , parMaxCopied :: {-# UNPACK #-}!Word64
-                       , parTotCopied :: {-# UNPACK #-}!Word64
-                       }
-
-  -- heap statistics
-  | HeapAllocated      { heapCapset  :: {-# UNPACK #-}!Capset
-                       , allocBytes  :: {-# UNPACK #-}!Word64
-                       }
-  | HeapSize           { heapCapset  :: {-# UNPACK #-}!Capset
-                       , sizeBytes   :: {-# UNPACK #-}!Word64
-                       }
-  | HeapLive           { heapCapset  :: {-# UNPACK #-}!Capset
-                       , liveBytes   :: {-# UNPACK #-}!Word64
-                       }
-  | HeapInfoGHC        { heapCapset    :: {-# UNPACK #-}!Capset
-                       , gens          :: {-# UNPACK #-}!Int
-                       , maxHeapSize   :: {-# UNPACK #-}!Word64
-                       , allocAreaSize :: {-# UNPACK #-}!Word64
-                       , mblockSize    :: {-# UNPACK #-}!Word64
-                       , blockSize     :: {-# UNPACK #-}!Word64
-                       }
-
-  -- adjusting the number of capabilities on the fly
-  | CapCreate          { cap :: {-# UNPACK #-}!Int
-                       }
-  | CapDelete          { cap :: {-# UNPACK #-}!Int
-                       }
-  | CapDisable         { cap :: {-# UNPACK #-}!Int
-                       }
-  | CapEnable          { cap :: {-# UNPACK #-}!Int
-                       }
-
-  -- capability sets
-  | CapsetCreate       { capset     :: {-# UNPACK #-}!Capset
-                       , capsetType :: CapsetType
-                       }
-  | CapsetDelete       { capset :: {-# UNPACK #-}!Capset
-                       }
-  | CapsetAssignCap    { capset :: {-# UNPACK #-}!Capset
-                       , cap    :: {-# UNPACK #-}!Int
-                       }
-  | CapsetRemoveCap    { capset :: {-# UNPACK #-}!Capset
-                       , cap    :: {-# UNPACK #-}!Int
-                       }
-
-  -- program/process info
-  | RtsIdentifier      { capset :: {-# UNPACK #-}!Capset
-                       , rtsident :: String
-                       }
-  | ProgramArgs        { capset :: {-# UNPACK #-}!Capset
-                       , args   :: [String]
-                       }
-  | ProgramEnv         { capset :: {-# UNPACK #-}!Capset
-                       , env    :: [String]
-                       }
-  | OsProcessPid       { capset :: {-# UNPACK #-}!Capset
-                       , pid    :: {-# UNPACK #-}!PID
-                       }
-  | OsProcessParentPid { capset :: {-# UNPACK #-}!Capset
-                       , ppid   :: {-# UNPACK #-}!PID
-                       }
-  | WallClockTime      { capset :: {-# UNPACK #-}!Capset
-                       , sec    :: {-# UNPACK #-}!Word64
-                       , nsec   :: {-# UNPACK #-}!Word32
-                       }
-
-  -- messages
-  | Message            { msg :: String }
-  | UserMessage        { msg :: String }
-  | UserMarker         { markername :: String }
-
-  -- Events emitted by a parallel RTS
-   -- Program /process info (tools might prefer newer variants above)
-  | Version            { version :: String }
-  | ProgramInvocation  { commandline :: String }
-   -- startup and shutdown (incl. real start time, not first log entry)
-  | CreateMachine      { machine :: {-# UNPACK #-} !MachineId,
-                         realtime    :: {-# UNPACK #-} !Timestamp}
-  | KillMachine        { machine ::  {-# UNPACK #-} !MachineId }
-   -- Haskell processes mgmt (thread groups that share heap and communicate)
-  | CreateProcess      { process :: {-# UNPACK #-} !ProcessId }
-  | KillProcess        { process :: {-# UNPACK #-} !ProcessId }
-  | AssignThreadToProcess { thread :: {-# UNPACK #-} !ThreadId,
-                            process :: {-# UNPACK #-} !ProcessId
-                          }
-   -- communication between processes
-  | EdenStartReceive   { }
-  | EdenEndReceive     { }
-  | SendMessage        { mesTag :: !MessageTag,
-                         senderProcess :: {-# UNPACK #-} !ProcessId,
-                         senderThread :: {-# UNPACK #-} !ThreadId,
-                         receiverMachine ::  {-# UNPACK #-} !MachineId,
-                         receiverProcess :: {-# UNPACK #-} !ProcessId,
-                         receiverInport :: {-# UNPACK #-} !PortId
-                       }
-  | ReceiveMessage     { mesTag :: !MessageTag,
-                         receiverProcess :: {-# UNPACK #-} !ProcessId,
-                         receiverInport :: {-# UNPACK #-} !PortId,
-                         senderMachine ::  {-# UNPACK #-} !MachineId,
-                         senderProcess :: {-# UNPACK #-} !ProcessId,
-                         senderThread :: {-# UNPACK #-} !ThreadId,
-                         messageSize :: {-# UNPACK #-} !MessageSize
-                       }
-  | SendReceiveLocalMessage { mesTag :: !MessageTag,
-                              senderProcess :: {-# UNPACK #-} !ProcessId,
-                              senderThread :: {-# UNPACK #-} !ThreadId,
-                              receiverProcess :: {-# UNPACK #-} !ProcessId,
-                              receiverInport :: {-# UNPACK #-} !PortId
-                            }
-
-  -- These events have been added for Mercury's benifit but are generally
-  -- useful.
-  | InternString       { str :: String, sId :: {-# UNPACK #-}!StringId }
-
-  -- Mercury specific events.
-  | MerStartParConjunction {
-        dyn_id      :: {-# UNPACK #-}!ParConjDynId,
-        static_id   :: {-# UNPACK #-}!ParConjStaticId
-    }
-  | MerEndParConjunction {
-        dyn_id      :: {-# UNPACK #-}!ParConjDynId
-    }
-  | MerEndParConjunct {
-        dyn_id      :: {-# UNPACK #-}!ParConjDynId
-    }
-  | MerCreateSpark {
-        dyn_id      :: {-# UNPACK #-}!ParConjDynId,
-        spark_id    :: {-# UNPACK #-}!SparkId
-    }
-  | MerFutureCreate {
-        future_id   :: {-# UNPACK #-}!FutureId,
-        name_id     :: {-# UNPACK #-}!StringId
-    }
-  | MerFutureWaitNosuspend {
-        future_id   :: {-# UNPACK #-}!FutureId
-    }
-  | MerFutureWaitSuspended {
-        future_id   :: {-# UNPACK #-}!FutureId
-    }
-  | MerFutureSignal {
-        future_id   :: {-# UNPACK #-}!FutureId
-    }
-  | MerLookingForGlobalThread
-  | MerWorkStealing
-  | MerLookingForLocalSpark
-  | MerReleaseThread {
-        thread_id   :: {-# UNPACK #-}!ThreadId
-    }
-  | MerCapSleeping
-  | MerCallingMain
-
-  -- perf events
-  | PerfName           { perfNum :: {-# UNPACK #-}!PerfEventTypeNum
-                       , name    :: String
-                       }
-  | PerfCounter        { perfNum :: {-# UNPACK #-}!PerfEventTypeNum
-                       , tid     :: {-# UNPACK #-}!KernelThreadId
-                       , period  :: {-# UNPACK #-}!Word64
-                       }
-  | PerfTracepoint     { perfNum :: {-# UNPACK #-}!PerfEventTypeNum
-                       , tid     :: {-# UNPACK #-}!KernelThreadId
-                       }
-
-  deriving Show
-
-{- [Note: Stop status in GHC-7.8.2]
-
-In GHC-7.7, a new thread block reason "BlockedOnMVarRead" was
-introduced, and placed adjacent to BlockedOnMVar (7). Therefore, event
-logs produced by GHC pre-7.8.2 encode BlockedOnBlackHole and following
-as 8..18, whereas GHC-7.8.2 event logs encode them as 9..19.
-Later, the prior event numbering was restored for GHC-7.8.3.
-See GHC bug #9003 for a discussion.
-
-The parsers in Events.hs have to be adapted accordingly, providing
-special ghc-7.8.2 parsers for the thread-stop event if GHC-7.8.2
-produced the eventlog.
-The EVENT_USER_MARKER was not present in GHC-7.6.3, and a new event
-EVENT_HACK_BUG_T9003 was added in GHC-7.8.3, so we take presence of
-USER_MARKER and absence of HACK_BUG_T9003 as an indication that
-ghc-7.8.2 parsers should be used.
--}
-
---sync with ghc/includes/Constants.h
-data ThreadStopStatus
- = NoStatus
- | HeapOverflow
- | StackOverflow
- | ThreadYielding
- | ThreadBlocked
- | ThreadFinished
- | ForeignCall
- | BlockedOnMVar
- | BlockedOnMVarRead   -- since GHC-7.8, see [Stop status since GHC-7.7]
- | BlockedOnBlackHole
- | BlockedOnRead
- | BlockedOnWrite
- | BlockedOnDelay
- | BlockedOnSTM
- | BlockedOnDoProc
- | BlockedOnCCall
- | BlockedOnCCall_NoUnblockExc
- | BlockedOnMsgThrowTo
- | ThreadMigrating
- | BlockedOnMsgGlobalise
- | BlockedOnBlackHoleOwnedBy {-# UNPACK #-}!ThreadId
- deriving (Show)
-
--- normal GHC encoding, see [Stop status in GHC-7.8.2]
-mkStopStatus :: RawThreadStopStatus -> ThreadStopStatus
-mkStopStatus n = case n of
- 0  ->  NoStatus
- 1  ->  HeapOverflow
- 2  ->  StackOverflow
- 3  ->  ThreadYielding
- 4  ->  ThreadBlocked
- 5  ->  ThreadFinished
- 6  ->  ForeignCall
- 7  ->  BlockedOnMVar
- 8  ->  BlockedOnBlackHole
- 9  ->  BlockedOnRead
- 10 ->  BlockedOnWrite
- 11 ->  BlockedOnDelay
- 12 ->  BlockedOnSTM
- 13 ->  BlockedOnDoProc
- 14 ->  BlockedOnCCall
- 15 ->  BlockedOnCCall_NoUnblockExc
- 16 ->  BlockedOnMsgThrowTo
- 17 ->  ThreadMigrating
- 18 ->  BlockedOnMsgGlobalise
- 19 ->  NoStatus -- yeuch... this one does not actually exist in GHC eventlogs
- 20 ->  BlockedOnMVarRead -- since GHC-7.8.3
- _  ->  error "mkStat"
-
--- GHC 7.8.2 encoding, see [Stop status in GHC-7.8.2]
-mkStopStatus782 :: RawThreadStopStatus -> ThreadStopStatus
-mkStopStatus782 n = case n of
- 0  ->  NoStatus
- 1  ->  HeapOverflow
- 2  ->  StackOverflow
- 3  ->  ThreadYielding
- 4  ->  ThreadBlocked
- 5  ->  ThreadFinished
- 6  ->  ForeignCall
- 7  ->  BlockedOnMVar
- 8  ->  BlockedOnMVarRead -- in GHC-7.8.2
- 9  ->  BlockedOnBlackHole
- 10 ->  BlockedOnRead
- 11 ->  BlockedOnWrite
- 12 ->  BlockedOnDelay
- 13 ->  BlockedOnSTM
- 14 ->  BlockedOnDoProc
- 15 ->  BlockedOnCCall
- 16 ->  BlockedOnCCall_NoUnblockExc
- 17 ->  BlockedOnMsgThrowTo
- 18 ->  ThreadMigrating
- 19 ->  BlockedOnMsgGlobalise
- _  ->  error "mkStat"
-
-maxThreadStopStatusPre77, maxThreadStopStatus782, maxThreadStopStatus 
-    :: RawThreadStopStatus
-maxThreadStopStatusPre77  = 18 -- see [Stop status in GHC-7.8.2]
-maxThreadStopStatus782    = 19 -- need to distinguish three cases
-maxThreadStopStatus = 20
-
-data CapsetType
- = CapsetCustom
- | CapsetOsProcess
- | CapsetClockDomain
- | CapsetUnknown
- deriving Show
-
-mkCapsetType :: Word16 -> CapsetType
-mkCapsetType n = case n of
- 1 -> CapsetCustom
- 2 -> CapsetOsProcess
- 3 -> CapsetClockDomain
- _ -> CapsetUnknown
-
--- | An event annotated with the Capability that generated it, if any
-data CapEvent
-  = CapEvent { ce_cap   :: Maybe Int,
-               ce_event :: Event
-               -- we could UNPACK ce_event, but the Event constructor
-               -- might be shared, in which case we could end up
-               -- increasing the space usage.
-             } deriving Show
-
---sync with ghc/parallel/PEOpCodes.h
-data MessageTag
-  = Ready | NewPE | PETIDS | Finish
-  | FailPE | RFork | Connect | DataMes
-  | Head | Constr | Part | Terminate
-  | Packet
-  -- with GUM and its variants, add:
-  -- ...| Fetch | Resume | Ack
-  -- ...| Fish | Schedule | Free | Reval | Shark
-  deriving (Enum, Show)
-offset :: RawMsgTag
-offset = 0x50
-
--- decoder and encoder
-toMsgTag :: RawMsgTag -> MessageTag
-toMsgTag = toEnum . fromIntegral . (\n -> n - offset)
-
-fromMsgTag :: MessageTag -> RawMsgTag
-fromMsgTag = (+ offset) . fromIntegral . fromEnum
diff --git a/GHC/RTS/Events.hs b/GHC/RTS/Events.hs
deleted file mode 100644
--- a/GHC/RTS/Events.hs
+++ /dev/null
@@ -1,1643 +0,0 @@
-{-# LANGUAGE CPP,BangPatterns,PatternGuards #-}
-{-# OPTIONS_GHC -funbox-strict-fields -fwarn-incomplete-patterns #-}
-{-
- -   Parser functions for GHC RTS EventLog framework.
- -}
-
-module GHC.RTS.Events (
-       -- * The event log types
-       EventLog(..),
-       EventType(..),
-       Event(..),
-       EventInfo(..),
-       ThreadStopStatus(..),
-       Header(..),
-       Data(..),
-       CapsetType(..),
-       Timestamp,
-       ThreadId,
-       TaskId,
-       KernelThreadId(..),
-       -- some types for the parallel RTS
-       ProcessId,
-       MachineId,
-       PortId,
-       MessageSize,
-       MessageTag(..),
-
-       -- * Reading and writing event logs
-       readEventLogFromFile, getEventLog,
-       writeEventLogToFile,
-
-       -- * Utilities
-       CapEvent(..), sortEvents, groupEvents, sortGroups,
-       buildEventTypeMap,
-
-       -- * Printing
-       showEventInfo, showThreadStopStatus,
-       ppEventLog, ppEventType, ppEvent,
-
-       -- * Perf events
-       nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT,
-       sz_perf_num, sz_kernel_tid
-  ) where
-
-{- Libraries. -}
-import Data.Binary
-import Data.Binary.Get hiding (skip)
-import qualified Data.Binary.Get as G
-import Data.Binary.Put
-import Control.Monad
-import Data.IntMap (IntMap)
-import qualified Data.IntMap as M
-import Control.Monad.Reader
-import Control.Monad.Except
-import qualified Data.ByteString.Lazy as L
-import Data.Function
-import Data.List
-import Data.Either
-import Data.Maybe
-import Text.Printf
-import Data.Array
-
-import GHC.RTS.EventTypes
-import GHC.RTS.EventParserUtils
-
-#define EVENTLOG_CONSTANTS_ONLY
-#include "EventLogFormat.h"
-
-------------------------------------------------------------------------------
--- Binary instances
-
-getEventType :: GetHeader EventType
-getEventType = do
-           etNum <- getH
-           size <- getH :: GetHeader EventTypeSize
-           let etSize = if size == 0xffff then Nothing else Just size
-           -- 0xffff indicates variable-sized event
-           etDescLen <- getH :: GetHeader EventTypeDescLen
-           etDesc <- getEtDesc (fromIntegral etDescLen)
-           etExtraLen <- getH :: GetHeader Word32
-           lift $ G.skip (fromIntegral etExtraLen)
-           ete <- getH :: GetHeader Marker
-           when (ete /= EVENT_ET_END) $
-              throwError ("Event Type end marker not found.")
-           return (EventType etNum etDesc etSize)
-           where
-             getEtDesc :: Int -> GetHeader [Char]
-             getEtDesc s = replicateM s (getH :: GetHeader Char)
-
-getHeader :: GetHeader Header
-getHeader = do
-           hdrb <- getH :: GetHeader Marker
-           when (hdrb /= EVENT_HEADER_BEGIN) $
-                throwError "Header begin marker not found"
-           hetm <- getH :: GetHeader Marker
-           when (hetm /= EVENT_HET_BEGIN) $
-                throwError "Header Event Type begin marker not found"
-           ets <- getEventTypes
-           emark <- getH :: GetHeader Marker
-           when (emark /= EVENT_HEADER_END) $
-                throwError "Header end marker not found"
-           return (Header ets)
-     where
-       getEventTypes :: GetHeader [EventType]
-       getEventTypes = do
-           m <- getH :: GetHeader Marker
-           case () of
-            _ | m == EVENT_ET_BEGIN -> do
-                   et <- getEventType
-                   nextET <- getEventTypes
-                   return (et : nextET)
-              | m == EVENT_HET_END ->
-                   return []
-              | otherwise ->
-                   throwError "Malformed list of Event Types in header"
-
-getEvent :: EventParsers -> GetEvents (Maybe Event)
-getEvent (EventParsers parsers) = do
-  etRef <- getE :: GetEvents EventTypeNum
-  if (etRef == EVENT_DATA_END)
-     then return Nothing
-     else do !ts   <- getE
-             -- trace ("event: " ++ show etRef) $ do
-             spec <- parsers ! fromIntegral etRef
-             return (Just (Event ts spec))
-
---
--- standardEventParsers.
---
-standardParsers :: [EventParser EventInfo]
-standardParsers = [
- (FixedSizeParser EVENT_STARTUP sz_cap (do -- (n_caps)
-      c <- getE :: GetEvents CapNo
-      return Startup{ n_caps = fromIntegral c }
-   )),
-
- (FixedSizeParser EVENT_BLOCK_MARKER (sz_block_size + sz_time + sz_cap) (do -- (size, end_time, cap)
-      block_size <- getE :: GetEvents BlockSize
-      end_time <- getE :: GetEvents Timestamp
-      c <- getE :: GetEvents CapNo
-      lbs <- lift . lift $ getLazyByteString ((fromIntegral block_size) -
-                                              (fromIntegral sz_block_event))
-      eparsers <- ask
-      let e_events = runGet (runExceptT $ runReaderT (getEventBlock eparsers) eparsers) lbs
-      return EventBlock{ end_time=end_time,
-                         cap= fromIntegral c,
-                         block_events=case e_events of
-                                        Left s -> error s
-                                        Right es -> es }
-   )),
-
- -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6+
- -- no longer generate the event; should be removed at some point
- (simpleEvent EVENT_SHUTDOWN Shutdown),
-
- (simpleEvent EVENT_REQUEST_SEQ_GC RequestSeqGC),
-
- (simpleEvent EVENT_REQUEST_PAR_GC RequestParGC),
-
- (simpleEvent EVENT_GC_START StartGC),
-
- (simpleEvent EVENT_GC_WORK GCWork),
-
- (simpleEvent EVENT_GC_IDLE GCIdle),
-
- (simpleEvent EVENT_GC_DONE GCDone),
-
- (simpleEvent EVENT_GC_END EndGC),
-
- (simpleEvent EVENT_GC_GLOBAL_SYNC GlobalSyncGC),
-
- (FixedSizeParser EVENT_GC_STATS_GHC (sz_capset + 2 + 5*8 + 4) (do  -- (heap_capset, generation, copied_bytes, slop_bytes, frag_bytes, par_n_threads, par_max_copied, par_tot_copied)
-      heapCapset   <- getE
-      gen          <- getE :: GetEvents Word16
-      copied       <- getE :: GetEvents Word64
-      slop         <- getE :: GetEvents Word64
-      frag         <- getE :: GetEvents Word64
-      parNThreads  <- getE :: GetEvents Word32
-      parMaxCopied <- getE :: GetEvents Word64
-      parTotCopied <- getE :: GetEvents Word64
-      return GCStatsGHC{ gen = fromIntegral gen
-                       , parNThreads = fromIntegral parNThreads
-                       , ..}
- )),
-
- (FixedSizeParser EVENT_HEAP_ALLOCATED (sz_capset + 8) (do  -- (heap_capset, alloc_bytes)
-      heapCapset <- getE
-      allocBytes <- getE
-      return HeapAllocated{..}
- )),
-
- (FixedSizeParser EVENT_HEAP_SIZE (sz_capset + 8) (do  -- (heap_capset, size_bytes)
-      heapCapset <- getE
-      sizeBytes  <- getE
-      return HeapSize{..}
- )),
-
- (FixedSizeParser EVENT_HEAP_LIVE (sz_capset + 8) (do  -- (heap_capset, live_bytes)
-      heapCapset <- getE
-      liveBytes  <- getE
-      return HeapLive{..}
- )),
-
- (FixedSizeParser EVENT_HEAP_INFO_GHC (sz_capset + 2 + 4*8) (do  -- (heap_capset, n_generations, max_heap_size, alloc_area_size, mblock_size, block_size)
-      heapCapset    <- getE
-      gens          <- getE :: GetEvents Word16
-      maxHeapSize   <- getE :: GetEvents Word64
-      allocAreaSize <- getE :: GetEvents Word64
-      mblockSize    <- getE :: GetEvents Word64
-      blockSize     <- getE :: GetEvents Word64
-      return HeapInfoGHC{gens = fromIntegral gens, ..}
- )),
-
- (FixedSizeParser EVENT_CAP_CREATE (sz_cap) (do  -- (cap)
-      cap <- getE :: GetEvents CapNo
-      return CapCreate{cap = fromIntegral cap}
- )),
-
- (FixedSizeParser EVENT_CAP_DELETE (sz_cap) (do  -- (cap)
-      cap <- getE :: GetEvents CapNo
-      return CapDelete{cap = fromIntegral cap}
- )),
-
- (FixedSizeParser EVENT_CAP_DISABLE (sz_cap) (do  -- (cap)
-      cap <- getE :: GetEvents CapNo
-      return CapDisable{cap = fromIntegral cap}
- )),
-
- (FixedSizeParser EVENT_CAP_ENABLE (sz_cap) (do  -- (cap)
-      cap <- getE :: GetEvents CapNo
-      return CapEnable{cap = fromIntegral cap}
- )),
-
- (FixedSizeParser EVENT_CAPSET_CREATE (sz_capset + sz_capset_type) (do -- (capset, capset_type)
-      cs <- getE
-      ct <- fmap mkCapsetType getE
-      return CapsetCreate{capset=cs,capsetType=ct}
-   )),
-
- (FixedSizeParser EVENT_CAPSET_DELETE sz_capset (do -- (capset)
-      cs <- getE
-      return CapsetDelete{capset=cs}
-   )),
-
- (FixedSizeParser EVENT_CAPSET_ASSIGN_CAP (sz_capset + sz_cap) (do -- (capset, cap)
-      cs <- getE
-      cp <- getE :: GetEvents CapNo
-      return CapsetAssignCap{capset=cs,cap=fromIntegral cp}
-   )),
-
- (FixedSizeParser EVENT_CAPSET_REMOVE_CAP (sz_capset + sz_cap) (do -- (capset, cap)
-      cs <- getE
-      cp <- getE :: GetEvents CapNo
-      return CapsetRemoveCap{capset=cs,cap=fromIntegral cp}
-   )),
-
- (FixedSizeParser EVENT_OSPROCESS_PID (sz_capset + sz_pid) (do -- (capset, pid)
-      cs <- getE
-      pd <- getE
-      return OsProcessPid{capset=cs,pid=pd}
-   )),
-
- (FixedSizeParser EVENT_OSPROCESS_PPID (sz_capset + sz_pid) (do -- (capset, ppid)
-      cs <- getE
-      pd <- getE
-      return OsProcessParentPid{capset=cs,ppid=pd}
-  )),
-
- (FixedSizeParser EVENT_WALL_CLOCK_TIME (sz_capset + 8 + 4) (do -- (capset, unix_epoch_seconds, nanoseconds)
-      cs <- getE
-      s  <- getE
-      ns <- getE
-      return WallClockTime{capset=cs,sec=s,nsec=ns}
-  )),
-
- (VariableSizeParser EVENT_LOG_MSG (do -- (msg)
-      num <- getE :: GetEvents Word16
-      string <- getString num
-      return Message{ msg = string }
-   )),
- (VariableSizeParser EVENT_USER_MSG (do -- (msg)
-      num <- getE :: GetEvents Word16
-      string <- getString num
-      return UserMessage{ msg = string }
-   )),
-    (VariableSizeParser EVENT_USER_MARKER (do -- (markername)
-      num <- getE :: GetEvents Word16
-      string <- getString num
-      return UserMarker{ markername = string }
-   )),
- (VariableSizeParser EVENT_PROGRAM_ARGS (do -- (capset, [arg])
-      num <- getE :: GetEvents Word16
-      cs <- getE
-      string <- getString (num - sz_capset)
-      return ProgramArgs{ capset = cs
-                        , args = splitNull string }
-   )),
- (VariableSizeParser EVENT_PROGRAM_ENV (do -- (capset, [arg])
-      num <- getE :: GetEvents Word16
-      cs <- getE
-      string <- getString (num - sz_capset)
-      return ProgramEnv{ capset = cs
-                       , env = splitNull string }
-   )),
- (VariableSizeParser EVENT_RTS_IDENTIFIER (do -- (capset, str)
-      num <- getE :: GetEvents Word16
-      cs <- getE
-      string <- getString (num - sz_capset)
-      return RtsIdentifier{ capset = cs
-                          , rtsident = string }
-   )),
-
- (VariableSizeParser EVENT_INTERN_STRING (do -- (str, id)
-      num <- getE :: GetEvents Word16
-      string <- getString (num - sz_string_id)
-      sId <- getE :: GetEvents StringId
-      return (InternString string sId)
-    )),
-
- (VariableSizeParser EVENT_THREAD_LABEL (do -- (thread, str)
-      num <- getE :: GetEvents Word16
-      tid <- getE
-      str <- getString (num - sz_tid)
-      return ThreadLabel{ thread      = tid
-                        , threadlabel = str }
-    ))
- ]
-
--- Parsers valid for GHC7 but not GHC6.
-ghc7Parsers :: [EventParser EventInfo]
-ghc7Parsers = [
- (FixedSizeParser EVENT_CREATE_THREAD sz_tid (do  -- (thread)
-      t <- getE
-      return CreateThread{thread=t}
-   )),
-
- (FixedSizeParser EVENT_RUN_THREAD sz_tid (do  --  (thread)
-      t <- getE
-      return RunThread{thread=t}
-   )),
-
- (FixedSizeParser EVENT_THREAD_RUNNABLE sz_tid (do  -- (thread)
-      t <- getE
-      return ThreadRunnable{thread=t}
-   )),
-
- (FixedSizeParser EVENT_MIGRATE_THREAD (sz_tid + sz_cap) (do  --  (thread, newCap)
-      t  <- getE
-      nc <- getE :: GetEvents CapNo
-      return MigrateThread{thread=t,newCap=fromIntegral nc}
-   )),
-
- -- Yes, EVENT_RUN/STEAL_SPARK are deprecated, but see the explanation in the
- -- 'ghc6Parsers' section below. Since we're parsing them anyway, we might
- -- as well convert them to the new SparkRun/SparkSteal events.
- (FixedSizeParser EVENT_RUN_SPARK sz_tid (do  -- (thread)
-      _ <- getE :: GetEvents ThreadId
-      return SparkRun
-   )),
-
- (FixedSizeParser EVENT_STEAL_SPARK (sz_tid + sz_cap) (do  -- (thread, victimCap)
-      _  <- getE :: GetEvents ThreadId
-      vc <- getE :: GetEvents CapNo
-      return SparkSteal{victimCap=fromIntegral vc}
-   )),
-
- (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_tid (do  -- (sparkThread)
-      st <- getE :: GetEvents ThreadId
-      return CreateSparkThread{sparkThread=st}
-   )),
-
- (FixedSizeParser EVENT_SPARK_COUNTERS (7*8) (do -- (crt,dud,ovf,cnv,gcd,fiz,rem)
-      crt <- getE :: GetEvents Word64
-      dud <- getE :: GetEvents Word64
-      ovf <- getE :: GetEvents Word64
-      cnv <- getE :: GetEvents Word64
-      gcd <- getE :: GetEvents Word64
-      fiz <- getE :: GetEvents Word64
-      rem <- getE :: GetEvents Word64
-      return SparkCounters{sparksCreated    = crt, sparksDud       = dud,
-                           sparksOverflowed = ovf, sparksConverted = cnv,
-                           -- Warning: order of fiz and gcd reversed!
-                           sparksFizzled    = fiz, sparksGCd       = gcd,
-                           sparksRemaining  = rem}
-   )),
-
- (simpleEvent EVENT_SPARK_CREATE   SparkCreate),
- (simpleEvent EVENT_SPARK_DUD      SparkDud),
- (simpleEvent EVENT_SPARK_OVERFLOW SparkOverflow),
- (simpleEvent EVENT_SPARK_RUN      SparkRun),
- (FixedSizeParser EVENT_SPARK_STEAL sz_cap (do  -- (victimCap)
-      vc <- getE :: GetEvents CapNo
-      return SparkSteal{victimCap=fromIntegral vc}
-   )),
- (simpleEvent EVENT_SPARK_FIZZLE   SparkFizzle),
- (simpleEvent EVENT_SPARK_GC       SparkGC),
-
- (FixedSizeParser EVENT_TASK_CREATE (sz_taskid + sz_cap + sz_kernel_tid) (do  -- (taskID, cap, tid)
-      taskId <- getE :: GetEvents TaskId
-      cap    <- getE :: GetEvents CapNo
-      tid    <- getE :: GetEvents KernelThreadId
-      return TaskCreate{ taskId, cap = fromIntegral cap, tid }
-   )),
- (FixedSizeParser EVENT_TASK_MIGRATE (sz_taskid + sz_cap*2) (do  -- (taskID, cap, new_cap)
-      taskId  <- getE :: GetEvents TaskId
-      cap     <- getE :: GetEvents CapNo
-      new_cap <- getE :: GetEvents CapNo
-      return TaskMigrate{ taskId, cap = fromIntegral cap
-                                , new_cap = fromIntegral new_cap
-                        }
-   )),
- (FixedSizeParser EVENT_TASK_DELETE (sz_taskid) (do  -- (taskID)
-      taskId <- getE :: GetEvents TaskId
-      return TaskDelete{ taskId }
-   )),
-
- (FixedSizeParser EVENT_THREAD_WAKEUP (sz_tid + sz_cap) (do  -- (thread, other_cap)
-      t <- getE
-      oc <- getE :: GetEvents CapNo
-      return WakeupThread{thread=t,otherCap=fromIntegral oc}
-   ))
- ]
-
--- special thread stop event parsers for GHC version 7.8.2
--- see [Stop status in GHC-7.8.2] in EventTypes.hs
-ghc782StopParser :: EventParser EventInfo
-ghc782StopParser =
- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) (do
-      -- (thread, status, info)
-      t <- getE
-      s <- getE :: GetEvents RawThreadStopStatus
-      i <- getE :: GetEvents ThreadId
-      return StopThread{thread = t,
-                        status = case () of
-                                  _ | s > maxThreadStopStatus782
-                                    -> NoStatus
-                                    | s == 9 {- XXX yeuch -}
-                                      -- GHC-7.8.2: 9 == BlockedOnBlackHole
-                                    -> BlockedOnBlackHoleOwnedBy i
-                                    | otherwise
-                                    -> mkStopStatus782 s}
-   ))
-
--- parsers for GHC < 7.8.2. Older versions do not use block info
--- (different length).  See [Stop status in GHC-7.8.2] in
--- EventTypes.hs
-pre77StopParsers :: [EventParser EventInfo]
-pre77StopParsers = [
- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status) (do
-      -- (thread, status)
-      t <- getE
-      s <- getE :: GetEvents RawThreadStopStatus
-      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77
-                                              then NoStatus
-                                              else mkStopStatus s}
-                        -- older version of the event, no block info
-   )),
-
- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) 
-    (do
-      -- (thread, status, info)
-      t <- getE
-      s <- getE :: GetEvents RawThreadStopStatus
-      i <- getE :: GetEvents ThreadId
-      return StopThread{thread = t,
-                        status = case () of
-                                  _ | s > maxThreadStopStatusPre77
-                                    -> NoStatus
-                                    | s == 8 {- XXX yeuch -}
-                                      -- pre-7.7: 8==BlockedOnBlackhole
-                                    -> BlockedOnBlackHoleOwnedBy i
-                                    | otherwise
-                                    -> mkStopStatus s}
-    ))
-  ]
-
--- parsers for GHC >= 7.8.3, always using block info field parser.
--- See [Stop status in GHC-7.8.2] in EventTypes.hs
-post782StopParser :: EventParser EventInfo
-post782StopParser = 
- (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) 
-    (do
-      -- (thread, status, info)
-      t <- getE
-      s <- getE :: GetEvents RawThreadStopStatus
-      i <- getE :: GetEvents ThreadId
-      return StopThread{thread = t,
-                        status = case () of
-                                  _ | s > maxThreadStopStatus
-                                    -> NoStatus
-                                    | s == 8 {- XXX yeuch -}
-                                      -- post-7.8.2: 8==BlockedOnBlackhole
-                                    -> BlockedOnBlackHoleOwnedBy i
-                                    | otherwise
-                                    -> mkStopStatus s}
-    ))
-
- -----------------------
- -- GHC 6.12 compat: GHC 6.12 reported the wrong sizes for some events,
- -- so we have to recognise those wrong sizes here for backwards
- -- compatibility.
-ghc6Parsers :: [EventParser EventInfo]
-ghc6Parsers = [
- (FixedSizeParser EVENT_STARTUP 0 (do
-      -- BUG in GHC 6.12: the startup event was incorrectly
-      -- declared as size 0, so we accept it here.
-      c <- getE :: GetEvents CapNo
-      return Startup{ n_caps = fromIntegral c }
-   )),
-
- (FixedSizeParser EVENT_CREATE_THREAD sz_old_tid (do  -- (thread)
-      t <- getE
-      return CreateThread{thread=t}
-   )),
-
- (FixedSizeParser EVENT_RUN_THREAD sz_old_tid (do  --  (thread)
-      t <- getE
-      return RunThread{thread=t}
-   )),
-
- (FixedSizeParser EVENT_STOP_THREAD (sz_old_tid + 2) (do  -- (thread, status)
-      t <- getE
-      s <- getE :: GetEvents RawThreadStopStatus
-      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77
-                                              then NoStatus
-                                              else mkStopStatus s}
-                        -- older version of the event uses pre-77 encoding
-                        -- (actually, it only uses encodings 0 to 5)
-                        -- see [Stop status in GHC-7.8.2] in EventTypes.hs
-   )),
-
- (FixedSizeParser EVENT_THREAD_RUNNABLE sz_old_tid (do  -- (thread)
-      t <- getE
-      return ThreadRunnable{thread=t}
-   )),
-
- (FixedSizeParser EVENT_MIGRATE_THREAD (sz_old_tid + sz_cap) (do  --  (thread, newCap)
-      t  <- getE
-      nc <- getE :: GetEvents CapNo
-      return MigrateThread{thread=t,newCap=fromIntegral nc}
-   )),
-
- -- Note: it is vital that these two (EVENT_RUN/STEAL_SPARK) remain here (at
- -- least in the ghc6Parsers section) even though both events are deprecated.
- -- The reason is that .eventlog files created by the buggy GHC-6.12
- -- mis-declare the size of these two events. So we have to handle them
- -- specially here otherwise we'll get the wrong size, leading to us getting
- -- out of sync and eventual parse failure. Since we're parsing them anyway,
- -- we might as well convert them to the new SparkRun/SparkSteal events.
- (FixedSizeParser EVENT_RUN_SPARK sz_old_tid (do  -- (thread)
-      _ <- getE :: GetEvents ThreadId
-      return SparkRun
-   )),
-
- (FixedSizeParser EVENT_STEAL_SPARK (sz_old_tid + sz_cap) (do  -- (thread, victimCap)
-      _  <- getE :: GetEvents ThreadId
-      vc <- getE :: GetEvents CapNo
-      return SparkSteal{victimCap=fromIntegral vc}
-   )),
-
- (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_old_tid (do  -- (sparkThread)
-      st <- getE :: GetEvents ThreadId
-      return CreateSparkThread{sparkThread=st}
-   )),
-
- (FixedSizeParser EVENT_THREAD_WAKEUP (sz_old_tid + sz_cap) (do  -- (thread, other_cap)
-      t <- getE
-      oc <- getE :: GetEvents CapNo
-      return WakeupThread{thread=t,otherCap=fromIntegral oc}
-   ))
- ]
-
--- Parsers for parallel events. Parameter is the thread_id size, to create
--- ghc6-parsers (using the wrong size) where necessary.
-parRTSParsers :: EventTypeSize -> [EventParser EventInfo]
-parRTSParsers sz_tid = [
- (VariableSizeParser EVENT_VERSION (do -- (version)
-      num <- getE :: GetEvents Word16
-      string <- getString num
-      return Version{ version = string }
-   )),
-
- (VariableSizeParser EVENT_PROGRAM_INVOCATION (do -- (cmd. line)
-      num <- getE :: GetEvents Word16
-      string <- getString num
-      return ProgramInvocation{ commandline = string }
-   )),
-
- (simpleEvent EVENT_EDEN_START_RECEIVE EdenStartReceive),
- (simpleEvent EVENT_EDEN_END_RECEIVE   EdenEndReceive),
-
- (FixedSizeParser EVENT_CREATE_PROCESS sz_procid
-    (do p <- getE
-        return CreateProcess{ process = p })
- ),
-
- (FixedSizeParser EVENT_KILL_PROCESS sz_procid
-    (do p <- getE
-        return KillProcess{ process = p })
- ),
-
- (FixedSizeParser EVENT_ASSIGN_THREAD_TO_PROCESS (sz_tid + sz_procid)
-    (do t <- getE
-        p <- getE
-        return AssignThreadToProcess { thread = t, process = p })
- ),
-
- (FixedSizeParser EVENT_CREATE_MACHINE (sz_mid + sz_realtime)
-    (do m <- getE
-        t <- getE
-        return CreateMachine { machine = m, realtime = t })
- ),
-
- (FixedSizeParser EVENT_KILL_MACHINE sz_mid
-    (do m <- getE :: GetEvents MachineId
-        return KillMachine { machine = m })
- ),
-
- (FixedSizeParser EVENT_SEND_MESSAGE
-    (sz_msgtag + 2*sz_procid + 2*sz_tid + sz_mid)
-    (do tag <- getE :: GetEvents RawMsgTag
-        sP  <- getE :: GetEvents ProcessId
-        sT  <- getE :: GetEvents ThreadId
-        rM  <- getE :: GetEvents MachineId
-        rP  <- getE :: GetEvents ProcessId
-        rIP <- getE :: GetEvents PortId
-        return SendMessage { mesTag = toMsgTag tag,
-                             senderProcess = sP,
-                             senderThread = sT,
-                             receiverMachine = rM,
-                             receiverProcess = rP,
-                             receiverInport = rIP
-                           })
- ),
-
- (FixedSizeParser EVENT_RECEIVE_MESSAGE
-    (sz_msgtag + 2*sz_procid + 2*sz_tid + sz_mid + sz_mes)
-    (do tag <- getE :: GetEvents Word8
-        rP  <- getE :: GetEvents ProcessId
-        rIP <- getE :: GetEvents PortId
-        sM  <- getE :: GetEvents MachineId
-        sP  <- getE :: GetEvents ProcessId
-        sT  <- getE :: GetEvents ThreadId
-        mS  <- getE :: GetEvents MessageSize
-        return  ReceiveMessage { mesTag = toMsgTag tag,
-                                 receiverProcess = rP,
-                                 receiverInport = rIP,
-                                 senderMachine = sM,
-                                 senderProcess = sP,
-                                 senderThread= sT,
-                                 messageSize = mS
-                               })
- ),
-
- (FixedSizeParser EVENT_SEND_RECEIVE_LOCAL_MESSAGE
-    (sz_msgtag + 2*sz_procid + 2*sz_tid)
-    (do tag <- getE :: GetEvents Word8
-        sP  <- getE :: GetEvents ProcessId
-        sT  <- getE :: GetEvents ThreadId
-        rP  <- getE :: GetEvents ProcessId
-        rIP <- getE :: GetEvents PortId
-        return SendReceiveLocalMessage { mesTag = toMsgTag tag,
-                                         senderProcess = sP,
-                                         senderThread = sT,
-                                         receiverProcess = rP,
-                                         receiverInport = rIP
-                                       })
- )]
-
-mercuryParsers = [
- (FixedSizeParser EVENT_MER_START_PAR_CONJUNCTION
-    (sz_par_conj_dyn_id + sz_par_conj_static_id)
-    (do dyn_id <- getE
-        static_id <- getE
-        return (MerStartParConjunction dyn_id static_id))
- ),
-
- (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCTION sz_par_conj_dyn_id
-    (do dyn_id <- getE
-        return (MerEndParConjunction dyn_id))
- ),
-
- (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCT sz_par_conj_dyn_id
-    (do dyn_id <- getE
-        return (MerEndParConjunct dyn_id))
- ),
-
- (FixedSizeParser EVENT_MER_CREATE_SPARK (sz_par_conj_dyn_id + sz_spark_id)
-    (do dyn_id <- getE
-        spark_id <- getE
-        return (MerCreateSpark dyn_id spark_id))
- ),
-
- (FixedSizeParser EVENT_MER_FUT_CREATE (sz_future_id + sz_string_id)
-    (do future_id <- getE
-        name_id <- getE
-        return (MerFutureCreate future_id name_id))
- ),
-
- (FixedSizeParser EVENT_MER_FUT_WAIT_NOSUSPEND (sz_future_id)
-    (do future_id <- getE
-        return (MerFutureWaitNosuspend future_id))
- ),
-
- (FixedSizeParser EVENT_MER_FUT_WAIT_SUSPENDED (sz_future_id)
-    (do future_id <- getE
-        return (MerFutureWaitSuspended future_id))
- ),
-
- (FixedSizeParser EVENT_MER_FUT_SIGNAL (sz_future_id)
-    (do future_id <- getE
-        return (MerFutureSignal future_id))
- ),
-
- (simpleEvent EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT MerLookingForGlobalThread),
- (simpleEvent EVENT_MER_WORK_STEALING MerWorkStealing),
- (simpleEvent EVENT_MER_LOOKING_FOR_LOCAL_SPARK MerLookingForLocalSpark),
-
- (FixedSizeParser EVENT_MER_RELEASE_CONTEXT sz_tid
-    (do thread_id <- getE
-        return (MerReleaseThread thread_id))
- ),
-
- (simpleEvent EVENT_MER_ENGINE_SLEEPING MerCapSleeping),
- (simpleEvent EVENT_MER_CALLING_MAIN MerCallingMain)
-
- ]
-
-perfParsers = [
- (VariableSizeParser EVENT_PERF_NAME (do -- (perf_num, name)
-      num     <- getE :: GetEvents Word16
-      perfNum <- getE
-      name    <- getString (num - sz_perf_num)
-      return PerfName{perfNum, name}
-   )),
-
- (FixedSizeParser EVENT_PERF_COUNTER (sz_perf_num + sz_kernel_tid + 8) (do -- (perf_num, tid, period)
-      perfNum <- getE
-      tid     <- getE
-      period  <- getE
-      return PerfCounter{perfNum, tid, period}
-  )),
-
- (FixedSizeParser EVENT_PERF_TRACEPOINT (sz_perf_num + sz_kernel_tid) (do -- (perf_num, tid)
-      perfNum <- getE
-      tid     <- getE
-      return PerfTracepoint{perfNum, tid}
-  ))
- ]
-
-getData :: GetEvents Data
-getData = do
-   db <- getE :: GetEvents Marker
-   when (db /= EVENT_DATA_BEGIN) $ throwError "Data begin marker not found"
-   eparsers <- ask
-   let
-       getEvents :: [Event] -> GetEvents Data
-       getEvents events = do
-         mb_e <- getEvent eparsers
-         case mb_e of
-           Nothing -> return (Data (reverse events))
-           Just e  -> getEvents (e:events)
-   -- in
-   getEvents []
-
-getEventBlock :: EventParsers -> GetEvents [Event]
-getEventBlock parsers = do
-  b <- lift . lift $ isEmpty
-  if b then return [] else do
-  mb_e <- getEvent parsers
-  case mb_e of
-    Nothing -> return []
-    Just e  -> do
-      es <- getEventBlock parsers
-      return (e:es)
-
-getEventLog :: ExceptT String Get EventLog
-getEventLog = do
-    header <- getHeader
-    let imap = M.fromList [ (fromIntegral (num t),t) | t <- eventTypes header]
-        -- This test is complete, no-one has extended this event yet and all future
-        -- extensions will use newly allocated event IDs.
-        is_ghc_6 = Just sz_old_tid == do create_et <- M.lookup EVENT_CREATE_THREAD imap
-                                         size create_et
-        {-
-        -- GHC6 writes an invalid header, we handle it here by using a
-        -- different set of event parsers.  Note that the ghc7 event parsers
-        -- are standard events, and can be used by other runtime systems that
-        -- make use of threadscope.
-        -}
-
-        -- GHC-7.8.2 uses a different thread block status encoding,
-        -- and therefore requires a different parser for the stop
-        -- event. Later, in GHC-7.8.3, the old encoding was restored.
-        -- GHC-7.8.2 can be recognised by presence and absence of
-        -- events in the header:
-        --   * User markers were added in GHC-7.8 
-        --   * an empty event HACK_BUG_T9003 was added in GHC-7.8.3
-        -- This fix breaks software which uses ghc-events and combines
-        -- user markers with the older stop status encoding. We don't
-        -- know of any such software, though.
-        is_pre77  = M.notMember EVENT_USER_MARKER imap
-        is_ghc782 = M.member EVENT_USER_MARKER imap &&
-                    M.notMember EVENT_HACK_BUG_T9003 imap
-
-        stopParsers = if is_pre77 then pre77StopParsers
-                      else if is_ghc782 then [ghc782StopParser]
-                           else [post782StopParser]
-
-        event_parsers = if is_ghc_6
-                            then standardParsers ++ ghc6Parsers ++
-                                parRTSParsers sz_old_tid
-                            else standardParsers ++ ghc7Parsers ++
-                                stopParsers ++ parRTSParsers sz_tid ++
-                                mercuryParsers ++ perfParsers
-        parsers = mkEventTypeParsers imap event_parsers
-    dat <- runReaderT getData (EventParsers parsers)
-    return (EventLog header dat)
-
-readEventLogFromFile :: FilePath -> IO (Either String EventLog)
-readEventLogFromFile f = do
-    s <- L.readFile f
-    return $ runGet (do v <- runExceptT getEventLog
-                        m <- isEmpty
-                        m `seq` return v)  s
-
--- -----------------------------------------------------------------------------
--- Utilities
-
-sortEvents :: [Event] -> [CapEvent]
-sortEvents = sortGroups . groupEvents
-
--- | Sort the raw event stream by time, annotating each event with the
--- capability that generated it.
-sortGroups :: [(Maybe Int, [Event])] -> [CapEvent]
-sortGroups groups = mergesort' (compare `on` (time . ce_event)) $
-                      [ [ CapEvent cap e | e <- es ]
-                      | (cap, es) <- groups ]
-     -- sorting is made much faster by the way that the event stream is
-     -- divided into blocks of events.
-     --  - All events in a block belong to a particular capability
-     --  - The events in a block are ordered by time
-     --  - blocks for the same capability appear in time order in the event
-     --    stream and do not overlap.
-     --
-     -- So to sort the events we make one list of events for each
-     -- capability (basically just concat . filter), and then
-     -- merge the resulting lists.
-
-groupEvents :: [Event] -> [(Maybe Int, [Event])]
-groupEvents es = (Nothing, n_events) :
-                 [ (Just (cap (head blocks)), concatMap block_events blocks)
-                 | blocks <- groups ]
-  where
-   (blocks, anon_events) = partitionEithers (map separate es)
-      where separate e | b@EventBlock{} <- spec e = Left  b
-                       | otherwise                = Right e
-
-   (cap_blocks, gbl_blocks) = partition (is_cap . cap) blocks
-      where is_cap c = fromIntegral c /= ((-1) :: Word16)
-
-   groups = groupBy ((==) `on` cap) $ sortBy (compare `on` cap) cap_blocks
-
-     -- There are two sources of events without a capability: events
-     -- in the raw stream not inside an EventBlock, and EventBlocks
-     -- with cap == -1.  We have to merge those two streams.
-     -- In light of merged logs, global blocks may have overlapping
-     -- time spans, thus the blocks are mergesorted
-   n_events = mergesort' (compare `on` time) (anon_events : map block_events gbl_blocks)
-
-mergesort' :: (a -> a -> Ordering) -> [[a]] -> [a]
-mergesort' _   [] = []
-mergesort' _   [xs] = xs
-mergesort' cmp xss = mergesort' cmp (merge_pairs cmp xss)
-
-merge_pairs :: (a -> a -> Ordering) -> [[a]] -> [[a]]
-merge_pairs _   [] = []
-merge_pairs _   [xs] = [xs]
-merge_pairs cmp (xs:ys:xss) = merge cmp xs ys : merge_pairs cmp xss
-
-merge :: (a -> a -> Ordering) -> [a] -> [a] -> [a]
-merge _   [] ys = ys
-merge _   xs [] = xs
-merge cmp (x:xs) (y:ys)
- = case x `cmp` y of
-        GT -> y : merge cmp (x:xs)   ys
-        _  -> x : merge cmp    xs (y:ys)
-
-
-buildEventTypeMap :: [EventType] -> IntMap EventType
-buildEventTypeMap etypes = M.fromList [ (fromIntegral (num t),t) | t <- etypes ]
-
------------------------------------------------------------------------------
--- Some pretty-printing support
-
-showEventInfo :: EventInfo -> String
-showEventInfo spec =
-    case spec of
-        EventBlock end_time cap _block_events ->
-          printf "event block: cap %d, end time: %d\n" cap end_time
-        Startup n_caps ->
-          printf "startup: %d capabilities" n_caps
-        CreateThread thread ->
-          printf "creating thread %d" thread
-        RunThread thread ->
-          printf "running thread %d" thread
-        StopThread thread status ->
-          printf "stopping thread %d (%s)" thread (showThreadStopStatus status)
-        ThreadRunnable thread ->
-          printf "thread %d is runnable" thread
-        MigrateThread thread newCap  ->
-          printf "migrating thread %d to cap %d" thread newCap
-        CreateSparkThread sparkThread ->
-          printf "creating spark thread %d" sparkThread
-        SparkCounters crt dud ovf cnv fiz gcd rem ->
-          printf "spark stats: %d created, %d converted, %d remaining (%d overflowed, %d dud, %d GC'd, %d fizzled)" crt cnv rem ovf dud gcd fiz
-        SparkCreate ->
-          printf "spark created"
-        SparkDud ->
-          printf "dud spark discarded"
-        SparkOverflow ->
-          printf "overflowed spark discarded"
-        SparkRun ->
-          printf "running a local spark"
-        SparkSteal victimCap ->
-          printf "stealing a spark from cap %d" victimCap
-        SparkFizzle ->
-          printf "spark fizzled"
-        SparkGC ->
-          printf "spark GCed"
-        TaskCreate taskId cap tid ->
-          printf "task 0x%x created on cap %d with OS kernel thread %d"
-                 taskId cap (kernelThreadId tid)
-        TaskMigrate taskId cap new_cap ->
-          printf "task 0x%x migrated from cap %d to cap %d"
-                 taskId cap new_cap
-        TaskDelete taskId ->
-          printf "task 0x%x deleted" taskId
-        Shutdown ->
-          printf "shutting down"
-        WakeupThread thread otherCap ->
-          printf "waking up thread %d on cap %d" thread otherCap
-        ThreadLabel thread label ->
-          printf "thread %d has label \"%s\"" thread label
-        RequestSeqGC ->
-          printf "requesting sequential GC"
-        RequestParGC ->
-          printf "requesting parallel GC"
-        StartGC ->
-          printf "starting GC"
-        EndGC ->
-          printf "finished GC"
-        GCWork ->
-          printf "GC working"
-        GCIdle ->
-          printf "GC idle"
-        GCDone ->
-          printf "GC done"
-        GlobalSyncGC ->
-          printf "all caps stopped for GC"
-        GCStatsGHC{..} ->
-          printf "GC stats for heap capset %d: generation %d, %d bytes copied, %d bytes slop, %d bytes fragmentation, %d par threads, %d bytes max par copied, %d bytes total par copied" heapCapset gen copied slop frag parNThreads parMaxCopied parTotCopied
-        HeapAllocated{..} ->
-          printf "allocated on heap capset %d: %d total bytes till now" heapCapset allocBytes
-        HeapSize{..} ->
-          printf "size of heap capset %d: %d bytes" heapCapset sizeBytes
-        HeapLive{..} ->
-          printf "live data in heap capset %d: %d bytes" heapCapset liveBytes
-        HeapInfoGHC{..} ->
-          printf "heap stats for heap capset %d: generations %d, %d bytes max heap size, %d bytes alloc area size, %d bytes mblock size, %d bytes block size" heapCapset gens maxHeapSize allocAreaSize mblockSize blockSize
-        CapCreate{cap} ->
-          printf "created cap %d" cap
-        CapDelete{cap} ->
-          printf "deleted cap %d" cap
-        CapDisable{cap} ->
-          printf "disabled cap %d" cap
-        CapEnable{cap} ->
-          printf "enabled cap %d" cap
-        Message msg ->
-          msg
-        UserMessage msg ->
-          msg
-        UserMarker markername ->
-          printf "marker: %s" markername
-        CapsetCreate cs ct ->
-          printf "created capset %d of type %s" cs (show ct)
-        CapsetDelete cs ->
-          printf "deleted capset %d" cs
-        CapsetAssignCap cs cp ->
-          printf "assigned cap %d to capset %d" cp cs
-        CapsetRemoveCap cs cp ->
-          printf "removed cap %d from capset %d" cp cs
-        OsProcessPid cs pid ->
-          printf "capset %d: pid %d" cs pid
-        OsProcessParentPid cs ppid ->
-          printf "capset %d: parent pid %d" cs ppid
-        WallClockTime cs sec nsec ->
-          printf "capset %d: wall clock time %ds %dns (unix epoch)" cs sec nsec
-        RtsIdentifier cs i ->
-          printf "capset %d: RTS version \"%s\"" cs i
-        ProgramArgs cs args ->
-          printf "capset %d: args: %s" cs (show args)
-        ProgramEnv cs env ->
-          printf "capset %d: env: %s" cs (show env)
-        UnknownEvent n ->
-          printf "Unknown event type %d" n
-        InternString str sId ->
-          printf "Interned string: \"%s\" with id %d" str sId
-        -- events for the parallel RTS
-        Version version ->
-          printf "compiler version is %s" version
-        ProgramInvocation  commandline ->
-          printf "program invocation: %s" commandline
-        EdenStartReceive ->
-          printf "starting to receive"
-        EdenEndReceive ->
-          printf "stop receiving"
-        CreateProcess  process ->
-          printf "creating process %d" process
-        KillProcess process ->
-          printf "killing process %d" process
-        AssignThreadToProcess thread process ->
-          printf "assigning thread %d to process %d" thread process
-        CreateMachine machine realtime ->
-          printf "creating machine %d at %d" machine realtime
-        KillMachine machine ->
-          printf "killing machine %d" machine
-        SendMessage mesTag senderProcess senderThread
-          receiverMachine receiverProcess receiverInport ->
-            printf "sending message with tag %s from process %d, thread %d to machine %d, process %d on inport %d"
-            (show mesTag) senderProcess senderThread receiverMachine receiverProcess receiverInport
-        ReceiveMessage mesTag receiverProcess receiverInport
-          senderMachine senderProcess senderThread messageSize ->
-            printf "receiving message with tag %s at process %d, inport %d from machine %d, process %d, thread %d with size %d"
-            (show mesTag) receiverProcess receiverInport
-            senderMachine senderProcess senderThread messageSize
-        SendReceiveLocalMessage mesTag senderProcess senderThread
-          receiverProcess receiverInport ->
-            printf "sending/receiving message with tag %s from process %d, thread %d to process %d on inport %d"
-            (show mesTag) senderProcess senderThread receiverProcess receiverInport
-        MerStartParConjunction dyn_id static_id ->
-          printf "Start a parallel conjunction 0x%x, static_id: %d" dyn_id static_id
-        MerEndParConjunction dyn_id ->
-          printf "End par conjunction: 0x%x" dyn_id
-        MerEndParConjunct dyn_id ->
-          printf "End par conjunct: 0x%x" dyn_id
-        MerCreateSpark dyn_id spark_id ->
-          printf "Create spark for conjunction: 0x%x spark: 0x%x" dyn_id spark_id
-        MerFutureCreate future_id name_id ->
-          printf "Create future 0x%x named %d" future_id name_id
-        MerFutureWaitNosuspend future_id ->
-          printf "Wait didn't suspend for future: 0x%x" future_id
-        MerFutureWaitSuspended future_id ->
-          printf "Wait suspended on future: 0x%x" future_id
-        MerFutureSignal future_id ->
-          printf "Signaled future 0x%x" future_id
-        MerLookingForGlobalThread ->
-          "Looking for global thread to resume"
-        MerWorkStealing ->
-          "Trying to steal a spark"
-        MerLookingForLocalSpark ->
-          "Looking for a local spark to execute"
-        MerReleaseThread thread_id ->
-          printf "Releasing thread %d to the free pool" thread_id
-        MerCapSleeping ->
-          "Capability going to sleep"
-        MerCallingMain ->
-          "About to call the program entry point"
-        PerfName{perfNum, name} ->
-          printf "perf event %d named \"%s\"" perfNum name
-        PerfCounter{perfNum, tid, period} ->
-          printf "perf event counter %d incremented by %d in OS thread %d"
-                 perfNum (period + 1) (kernelThreadId tid)
-        PerfTracepoint{perfNum, tid} ->
-          printf "perf event tracepoint %d reached in OS thread %d"
-                 perfNum (kernelThreadId tid)
-
-showThreadStopStatus :: ThreadStopStatus -> String
-showThreadStopStatus HeapOverflow   = "heap overflow"
-showThreadStopStatus StackOverflow  = "stack overflow"
-showThreadStopStatus ThreadYielding = "thread yielding"
-showThreadStopStatus ThreadBlocked  = "thread blocked"
-showThreadStopStatus ThreadFinished = "thread finished"
-showThreadStopStatus ForeignCall    = "making a foreign call"
-showThreadStopStatus BlockedOnMVar  = "blocked on an MVar"
-showThreadStopStatus BlockedOnMVarRead = "blocked reading an MVar"
-showThreadStopStatus BlockedOnBlackHole = "blocked on a black hole"
-showThreadStopStatus BlockedOnRead = "blocked on I/O read"
-showThreadStopStatus BlockedOnWrite = "blocked on I/O write"
-showThreadStopStatus BlockedOnDelay = "blocked on threadDelay"
-showThreadStopStatus BlockedOnSTM = "blocked in STM retry"
-showThreadStopStatus BlockedOnDoProc = "blocked on asyncDoProc"
-showThreadStopStatus BlockedOnCCall = "blocked in a foreign call"
-showThreadStopStatus BlockedOnCCall_NoUnblockExc = "blocked in a foreign call"
-showThreadStopStatus BlockedOnMsgThrowTo = "blocked in throwTo"
-showThreadStopStatus ThreadMigrating = "thread migrating"
-showThreadStopStatus BlockedOnMsgGlobalise = "waiting for data to be globalised"
-showThreadStopStatus (BlockedOnBlackHoleOwnedBy target) =
-          "blocked on black hole owned by thread " ++ show target
-showThreadStopStatus NoStatus = "No stop thread status"
-
-ppEventLog :: EventLog -> String
-ppEventLog (EventLog (Header ets) (Data es)) = unlines $ concat (
-    [ ["Event Types:"]
-    , map ppEventType ets
-    , [""] -- newline
-    , ["Events:"]
-    , map (ppEvent imap) sorted
-    , [""] ]) -- extra trailing newline
- where
-    imap = buildEventTypeMap ets
-    sorted = sortEvents es
-
-ppEventType :: EventType -> String
-ppEventType (EventType num dsc msz) = printf "%4d: %s (size %s)" num dsc
-   (case msz of Nothing -> "variable"; Just x -> show x)
-
-ppEvent :: IntMap EventType -> CapEvent -> String
-ppEvent imap (CapEvent cap (Event time spec)) =
-  printf "%9d: " time ++
-  (case cap of
-    Nothing -> ""
-    Just c  -> printf "cap %d: " c) ++
-  case spec of
-    UnknownEvent{ ref=ref } ->
-      printf (desc (fromJust (M.lookup (fromIntegral ref) imap)))
-
-    other -> showEventInfo spec
-
-type PutEvents a = PutM a
-
-putE :: Binary a => a -> PutEvents ()
-putE = put
-
-runPutEBS :: PutEvents () -> L.ByteString
-runPutEBS = runPut
-
-writeEventLogToFile f el = L.writeFile f $ runPutEBS $ putEventLog el
-
-putType :: EventTypeNum -> PutEvents ()
-putType = putE
-
-putCap :: Int -> PutEvents ()
-putCap c = putE (fromIntegral c :: CapNo)
-
-putMarker :: Word32 -> PutEvents ()
-putMarker = putE
-
-putEStr :: String -> PutEvents ()
-putEStr = mapM_ putE
-
-putEventLog :: EventLog -> PutEvents ()
-putEventLog (EventLog hdr es) = do
-    putHeader hdr
-    putData es
-
-putHeader :: Header -> PutEvents ()
-putHeader (Header ets) = do
-    putMarker EVENT_HEADER_BEGIN
-    putMarker EVENT_HET_BEGIN
-    mapM_ putEventType ets
-    putMarker EVENT_HET_END
-    putMarker EVENT_HEADER_END
- where
-    putEventType (EventType n d msz) = do
-        putMarker EVENT_ET_BEGIN
-        putType n
-        putE $ fromMaybe 0xffff msz
-        putE (fromIntegral $ length d :: EventTypeDescLen)
-        mapM_ put d
-        -- the event type header allows for extra data, which we don't use:
-        putE (0 :: Word32)
-        putMarker EVENT_ET_END
-
-putData :: Data -> PutEvents ()
-putData (Data es) = do
-    putMarker EVENT_DATA_BEGIN -- Word32
-    mapM_ putEvent es
-    putType EVENT_DATA_END -- Word16
-
-eventTypeNum :: EventInfo -> EventTypeNum
-eventTypeNum e = case e of
-    CreateThread {} -> EVENT_CREATE_THREAD
-    RunThread {} -> EVENT_RUN_THREAD
-    StopThread {} -> EVENT_STOP_THREAD
-    ThreadRunnable {} -> EVENT_THREAD_RUNNABLE
-    MigrateThread {} -> EVENT_MIGRATE_THREAD
-    Shutdown {} -> EVENT_SHUTDOWN
-    WakeupThread {} -> EVENT_THREAD_WAKEUP
-    ThreadLabel {}  -> EVENT_THREAD_LABEL
-    StartGC {} -> EVENT_GC_START
-    EndGC {} -> EVENT_GC_END
-    GlobalSyncGC {} -> EVENT_GC_GLOBAL_SYNC
-    RequestSeqGC {} -> EVENT_REQUEST_SEQ_GC
-    RequestParGC {} -> EVENT_REQUEST_PAR_GC
-    CreateSparkThread {} -> EVENT_CREATE_SPARK_THREAD
-    SparkCounters {} -> EVENT_SPARK_COUNTERS
-    SparkCreate   {} -> EVENT_SPARK_CREATE
-    SparkDud      {} -> EVENT_SPARK_DUD
-    SparkOverflow {} -> EVENT_SPARK_OVERFLOW
-    SparkRun      {} -> EVENT_SPARK_RUN
-    SparkSteal    {} -> EVENT_SPARK_STEAL
-    SparkFizzle   {} -> EVENT_SPARK_FIZZLE
-    SparkGC       {} -> EVENT_SPARK_GC
-    TaskCreate  {} -> EVENT_TASK_CREATE
-    TaskMigrate {} -> EVENT_TASK_MIGRATE
-    TaskDelete  {} -> EVENT_TASK_DELETE
-    Message {} -> EVENT_LOG_MSG
-    Startup {} -> EVENT_STARTUP
-    EventBlock {} -> EVENT_BLOCK_MARKER
-    UserMessage {} -> EVENT_USER_MSG
-    UserMarker  {} -> EVENT_USER_MARKER
-    GCIdle {} -> EVENT_GC_IDLE
-    GCWork {} -> EVENT_GC_WORK
-    GCDone {} -> EVENT_GC_DONE
-    GCStatsGHC{} -> EVENT_GC_STATS_GHC
-    HeapAllocated{} -> EVENT_HEAP_ALLOCATED
-    HeapSize{} -> EVENT_HEAP_SIZE
-    HeapLive{} -> EVENT_HEAP_LIVE
-    HeapInfoGHC{} -> EVENT_HEAP_INFO_GHC
-    CapCreate{} -> EVENT_CAP_CREATE
-    CapDelete{} -> EVENT_CAP_DELETE
-    CapDisable{} -> EVENT_CAP_DISABLE
-    CapEnable{} -> EVENT_CAP_ENABLE
-    CapsetCreate {} -> EVENT_CAPSET_CREATE
-    CapsetDelete {} -> EVENT_CAPSET_DELETE
-    CapsetAssignCap {} -> EVENT_CAPSET_ASSIGN_CAP
-    CapsetRemoveCap {} -> EVENT_CAPSET_REMOVE_CAP
-    RtsIdentifier {} -> EVENT_RTS_IDENTIFIER
-    ProgramArgs {} -> EVENT_PROGRAM_ARGS
-    ProgramEnv {} -> EVENT_PROGRAM_ENV
-    OsProcessPid {} -> EVENT_OSPROCESS_PID
-    OsProcessParentPid{} -> EVENT_OSPROCESS_PPID
-    WallClockTime{} -> EVENT_WALL_CLOCK_TIME
-    UnknownEvent {} -> error "eventTypeNum UnknownEvent"
-    InternString {} -> EVENT_INTERN_STRING
-    Version {} -> EVENT_VERSION
-    ProgramInvocation {} -> EVENT_PROGRAM_INVOCATION
-    EdenStartReceive {} -> EVENT_EDEN_START_RECEIVE
-    EdenEndReceive {} -> EVENT_EDEN_END_RECEIVE
-    CreateProcess {} -> EVENT_CREATE_PROCESS
-    KillProcess {} -> EVENT_KILL_PROCESS
-    AssignThreadToProcess {} -> EVENT_ASSIGN_THREAD_TO_PROCESS
-    CreateMachine {} -> EVENT_CREATE_MACHINE
-    KillMachine {} -> EVENT_KILL_MACHINE
-    SendMessage {} -> EVENT_SEND_MESSAGE
-    ReceiveMessage {} -> EVENT_RECEIVE_MESSAGE
-    SendReceiveLocalMessage {} -> EVENT_SEND_RECEIVE_LOCAL_MESSAGE
-    MerStartParConjunction {} -> EVENT_MER_START_PAR_CONJUNCTION
-    MerEndParConjunction _ -> EVENT_MER_STOP_PAR_CONJUNCTION
-    MerEndParConjunct _ -> EVENT_MER_STOP_PAR_CONJUNCT
-    MerCreateSpark {} -> EVENT_MER_CREATE_SPARK
-    MerFutureCreate {} -> EVENT_MER_FUT_CREATE
-    MerFutureWaitNosuspend _ -> EVENT_MER_FUT_WAIT_NOSUSPEND
-    MerFutureWaitSuspended _ -> EVENT_MER_FUT_WAIT_SUSPENDED
-    MerFutureSignal _ -> EVENT_MER_FUT_SIGNAL
-    MerLookingForGlobalThread -> EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT
-    MerWorkStealing -> EVENT_MER_WORK_STEALING
-    MerLookingForLocalSpark -> EVENT_MER_LOOKING_FOR_LOCAL_SPARK
-    MerReleaseThread _ -> EVENT_MER_RELEASE_CONTEXT
-    MerCapSleeping -> EVENT_MER_ENGINE_SLEEPING
-    MerCallingMain -> EVENT_MER_CALLING_MAIN
-    PerfName       {} -> nEVENT_PERF_NAME
-    PerfCounter    {} -> nEVENT_PERF_COUNTER
-    PerfTracepoint {} -> nEVENT_PERF_TRACEPOINT
-
-nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT :: EventTypeNum
-nEVENT_PERF_NAME = EVENT_PERF_NAME
-nEVENT_PERF_COUNTER = EVENT_PERF_COUNTER
-nEVENT_PERF_TRACEPOINT = EVENT_PERF_TRACEPOINT
-
-putEvent :: Event -> PutEvents ()
-putEvent (Event t spec) = do
-    putType (eventTypeNum spec)
-    put t
-    putEventSpec spec
-
-putEventSpec (Startup caps) = do
-    putCap (fromIntegral caps)
-
-putEventSpec (EventBlock end cap es) = do
-    let block = runPutEBS (mapM_ putEvent es)
-    put (fromIntegral (L.length block) + 24 :: Word32)
-    putE end
-    putE (fromIntegral cap :: CapNo)
-    putLazyByteString block
-
-putEventSpec (CreateThread t) = do
-    putE t
-
-putEventSpec (RunThread t) = do
-    putE t
-
--- here we assume that ThreadStopStatus fromEnum matches the definitions in
--- EventLogFormat.h
--- The standard encoding is used here, which is wrong for eventlogs
--- produced by GHC-7.8.2 ([Stop status in GHC-7.8.2] in EventTypes.hs
-putEventSpec (StopThread t s) = do
-    putE t
-    putE $ case s of
-            NoStatus -> 0 :: Word16
-            HeapOverflow -> 1
-            StackOverflow -> 2
-            ThreadYielding -> 3
-            ThreadBlocked -> 4
-            ThreadFinished -> 5
-            ForeignCall -> 6
-            BlockedOnMVar -> 7
-            BlockedOnMVarRead -> 20 -- since GHC-7.8.3
-            BlockedOnBlackHole -> 8
-            BlockedOnBlackHoleOwnedBy _ -> 8
-            BlockedOnRead -> 9
-            BlockedOnWrite -> 10
-            BlockedOnDelay -> 11
-            BlockedOnSTM -> 12
-            BlockedOnDoProc -> 13
-            BlockedOnCCall -> 14
-            BlockedOnCCall_NoUnblockExc -> 15
-            BlockedOnMsgThrowTo -> 16
-            ThreadMigrating -> 17
-            BlockedOnMsgGlobalise -> 18
-    putE $ case s of
-            BlockedOnBlackHoleOwnedBy i -> i
-            _                           -> 0
-
-putEventSpec (ThreadRunnable t) = do
-    putE t
-
-putEventSpec (MigrateThread t c) = do
-    putE t
-    putCap c
-
-putEventSpec (CreateSparkThread t) = do
-    putE t
-
-putEventSpec (SparkCounters crt dud ovf cnv fiz gcd rem) = do
-    putE crt
-    putE dud
-    putE ovf
-    putE cnv
-    -- Warning: order of fiz and gcd reversed!
-    putE gcd
-    putE fiz
-    putE rem
-
-putEventSpec SparkCreate = do
-    return ()
-
-putEventSpec SparkDud = do
-    return ()
-
-putEventSpec SparkOverflow = do
-    return ()
-
-putEventSpec SparkRun = do
-    return ()
-
-putEventSpec (SparkSteal c) = do
-    putCap c
-
-putEventSpec SparkFizzle = do
-    return ()
-
-putEventSpec SparkGC = do
-    return ()
-
-putEventSpec (WakeupThread t c) = do
-    putE t
-    putCap c
-
-putEventSpec (ThreadLabel t l) = do
-    putE (fromIntegral (length l) + sz_tid :: Word16)
-    putE t
-    putEStr l
-
-putEventSpec Shutdown = do
-    return ()
-
-putEventSpec RequestSeqGC = do
-    return ()
-
-putEventSpec RequestParGC = do
-    return ()
-
-putEventSpec StartGC = do
-    return ()
-
-putEventSpec GCWork = do
-    return ()
-
-putEventSpec GCIdle = do
-    return ()
-
-putEventSpec GCDone = do
-    return ()
-
-putEventSpec EndGC = do
-    return ()
-
-putEventSpec GlobalSyncGC = do
-    return ()
-
-putEventSpec (TaskCreate taskId cap tid) = do
-    putE taskId
-    putCap cap
-    putE tid
-
-putEventSpec (TaskMigrate taskId cap new_cap) = do
-    putE taskId
-    putCap cap
-    putCap new_cap
-
-putEventSpec (TaskDelete taskId) = do
-    putE taskId
-
-putEventSpec GCStatsGHC{..} = do
-    putE heapCapset
-    putE (fromIntegral gen :: Word16)
-    putE copied
-    putE slop
-    putE frag
-    putE (fromIntegral parNThreads :: Word32)
-    putE parMaxCopied
-    putE parTotCopied
-
-putEventSpec HeapAllocated{..} = do
-    putE heapCapset
-    putE allocBytes
-
-putEventSpec HeapSize{..} = do
-    putE heapCapset
-    putE sizeBytes
-
-putEventSpec HeapLive{..} = do
-    putE heapCapset
-    putE liveBytes
-
-putEventSpec HeapInfoGHC{..} = do
-    putE heapCapset
-    putE (fromIntegral gens :: Word16)
-    putE maxHeapSize
-    putE allocAreaSize
-    putE mblockSize
-    putE blockSize
-
-putEventSpec CapCreate{cap} = do
-    putCap cap
-
-putEventSpec CapDelete{cap} = do
-    putCap cap
-
-putEventSpec CapDisable{cap} = do
-    putCap cap
-
-putEventSpec CapEnable{cap} = do
-    putCap cap
-
-putEventSpec (CapsetCreate cs ct) = do
-    putE cs
-    putE $ case ct of
-            CapsetCustom -> 1 :: Word16
-            CapsetOsProcess -> 2
-            CapsetClockDomain -> 3
-            CapsetUnknown -> 0
-
-putEventSpec (CapsetDelete cs) = do
-    putE cs
-
-putEventSpec (CapsetAssignCap cs cp) = do
-    putE cs
-    putCap cp
-
-putEventSpec (CapsetRemoveCap cs cp) = do
-    putE cs
-    putCap cp
-
-putEventSpec (RtsIdentifier cs rts) = do
-    putE (fromIntegral (length rts) + sz_capset :: Word16)
-    putE cs
-    putEStr rts
-
-putEventSpec (ProgramArgs cs as) = do
-    let as' = unsep as
-    putE (fromIntegral (length as') + sz_capset :: Word16)
-    putE cs
-    mapM_ putE as'
-
-putEventSpec (ProgramEnv cs es) = do
-    let es' = unsep es
-    putE (fromIntegral (length es') + sz_capset :: Word16)
-    putE cs
-    mapM_ putE es'
-
-putEventSpec (OsProcessPid cs pid) = do
-    putE cs
-    putE pid
-
-putEventSpec (OsProcessParentPid cs ppid) = do
-    putE cs
-    putE ppid
-
-putEventSpec (WallClockTime cs sec nsec) = do
-    putE cs
-    putE sec
-    putE nsec
-
-putEventSpec (Message s) = do
-    putE (fromIntegral (length s) :: Word16)
-    mapM_ putE s
-
-putEventSpec (UserMessage s) = do
-    putE (fromIntegral (length s) :: Word16)
-    mapM_ putE s
-
-putEventSpec (UserMarker s) = do
-    putE (fromIntegral (length s) :: Word16)
-    mapM_ putE s
-
-putEventSpec (UnknownEvent {}) = error "putEventSpec UnknownEvent"
-
-putEventSpec (InternString str id) = do
-    putE len
-    mapM_ putE str
-    putE id
-  where len = (fromIntegral (length str) :: Word16) + sz_string_id
-
-putEventSpec (Version s) = do
-    putE (fromIntegral (length s) :: Word16)
-    mapM_ putE s
-
-putEventSpec (ProgramInvocation s) = do
-    putE (fromIntegral (length s) :: Word16)
-    mapM_ putE s
-
-putEventSpec ( EdenStartReceive ) = return ()
-
-putEventSpec ( EdenEndReceive ) = return ()
-
-putEventSpec ( CreateProcess  process ) = do
-    putE process
-
-putEventSpec ( KillProcess process ) = do
-    putE process
-
-putEventSpec ( AssignThreadToProcess thread process ) = do
-    putE thread
-    putE process
-
-putEventSpec ( CreateMachine machine realtime ) = do
-    putE machine
-    putE realtime
-
-putEventSpec ( KillMachine machine ) = do
-    putE machine
-
-putEventSpec ( SendMessage mesTag senderProcess senderThread
-                 receiverMachine receiverProcess receiverInport ) = do
-    putE (fromMsgTag mesTag)
-    putE senderProcess
-    putE senderThread
-    putE receiverMachine
-    putE receiverProcess
-    putE receiverInport
-
-putEventSpec ( ReceiveMessage mesTag receiverProcess receiverInport
-                 senderMachine senderProcess senderThread messageSize ) = do
-    putE (fromMsgTag mesTag)
-    putE receiverProcess
-    putE receiverInport
-    putE senderMachine
-    putE senderProcess
-    putE senderThread
-    putE messageSize
-
-putEventSpec ( SendReceiveLocalMessage mesTag senderProcess senderThread
-                 receiverProcess receiverInport ) = do
-    putE (fromMsgTag mesTag)
-    putE senderProcess
-    putE senderThread
-    putE receiverProcess
-    putE receiverInport
-
-putEventSpec (MerStartParConjunction dyn_id static_id) = do
-    putE dyn_id
-    putE static_id
-
-putEventSpec (MerEndParConjunction dyn_id) = do
-    putE dyn_id
-
-putEventSpec (MerEndParConjunct dyn_id) = do
-    putE dyn_id
-
-putEventSpec (MerCreateSpark dyn_id spark_id) = do
-    putE dyn_id
-    putE spark_id
-
-putEventSpec (MerFutureCreate future_id name_id) = do
-    putE future_id
-    putE name_id
-
-putEventSpec (MerFutureWaitNosuspend future_id) = do
-    putE future_id
-
-putEventSpec (MerFutureWaitSuspended future_id) = do
-    putE future_id
-
-putEventSpec (MerFutureSignal future_id) = do
-    putE future_id
-
-putEventSpec MerLookingForGlobalThread = return ()
-putEventSpec MerWorkStealing = return ()
-putEventSpec MerLookingForLocalSpark = return ()
-
-putEventSpec (MerReleaseThread thread_id) = do
-    putE thread_id
-
-putEventSpec MerCapSleeping = return ()
-putEventSpec MerCallingMain = return ()
-
-putEventSpec PerfName{..} = do
-    putE (fromIntegral (length name) + sz_perf_num :: Word16)
-    putE perfNum
-    mapM_ putE name
-
-putEventSpec PerfCounter{..} = do
-    putE perfNum
-    putE tid
-    putE period
-
-putEventSpec PerfTracepoint{..} = do
-    putE perfNum
-    putE tid
-
--- [] == []
--- [x] == x\0
--- [x, y, z] == x\0y\0
-unsep :: [String] -> String
-unsep = concatMap (++"\0") -- not the most efficient, but should be ok
-
-splitNull :: String -> [String]
-splitNull [] = []
-splitNull xs = case span (/= '\0') xs of
-                (x, xs') -> x : splitNull (drop 1 xs')
diff --git a/GHC/RTS/Events/Analysis.hs b/GHC/RTS/Events/Analysis.hs
deleted file mode 100644
--- a/GHC/RTS/Events/Analysis.hs
+++ /dev/null
@@ -1,282 +0,0 @@
-module GHC.RTS.Events.Analysis
-  ( Machine (..)
-  , validate
-  , validates
-  , simulate
-  , Profile (..)
-  , profile
-  , profileIndexed
-  , profileRouted
-  , extractIndexed
-  , refineM
-  , profileM
-  , indexM
-  , toList
-  , toMaybe
-  , Process (..)
-  , routeM
-  )
- where
-
-import GHC.RTS.Events
-
-import Data.Map (Map)
-import qualified Data.Map as M
-import Data.Maybe (fromMaybe, catMaybes)
-import Data.Either (rights)
-
---------------------------------------------------------------------------------
--- | This is based on a simple finite state machine hence the names `delta`
--- for the state transition function.
--- Since states might be more than simple pattern matched constructors, we
--- use `finals :: state -> Bool`, rather than `Set state`, to indicate that
--- the machine is in some final state. Similarly for `alpha`, which
--- indicates the alphabet of inputs to a machine.
--- The function `delta` returns `Maybe` values, where `Nothing`
--- indicates that no valid transition is possible: ie, there has been an
--- error.
-data Machine s i = Machine
-  { initial :: s                 -- ^ Initial state
-  , final   :: s -> Bool         -- ^ Valid final states
-  , alpha   :: i -> Bool         -- ^ Valid input alphabet
-  , delta   :: s -> i -> Maybe s -- ^ State transition function
-  }
-
--- | This machine always accepts, never terminates, and always has unit state.
-unitMachine :: Machine () i
-unitMachine = Machine
-  { initial  = ()
-  , final    = const False
-  , alpha    = const True
-  , delta    = (\s i -> Just ())
-  }
-
--- | The `step` function runs a machine in a state against a single input.
--- The state remains fixed once a final state is encountered. The
--- result is `Left state input` if some `state` failed for an `ìnput`, and
--- `Right state` for a successful state.
-step :: Machine s i -> s -> i -> Either (s, i) s
-step m s i
-  | final m s = Right s
-  | alpha m i = case delta m s i of
-      Just s' -> Right s'
-      Nothing -> Left (s, i)
-  | otherwise = Right s
-
--- | The `validate` function takes a machine and a list of inputs. The machine
--- is started from its initial state and run against the inputs in turn.
--- It returns the state and input on failure, and just the state on success.
-validate :: Machine s i -> [i] -> Either (s, i) s
-validate m = foldl (>>=) (Right (initial m)) . map (flip (step m))
-
--- | This function is similar to `validate`, but outputs each intermediary
--- state as well. For an incremental version, use `simulate`.
-validates :: Machine s i -> [i] -> [Either (s, i) s]
-validates m = scanl (>>=) (Right (initial m)) . map (flip (step m))
-
---------------------------------------------------------------------------------
--- A Process is a list of successful values, followed by an error if one
--- occured. This captures the idea that a computation may produce a list of
--- elements before possibly failing. This gives us an incremental interface
--- to data processed from machine transitions.
-data Process e a
-  = Done
-  | Fail e
-  | Prod a (Process e a)
- deriving Show
-
-toList :: Process e a -> [a]
-toList (Fail _)    = []
-toList Done        = []
-toList (Prod a as) = a : toList as
-
-toMaybe :: Process e a -> Maybe e
-toMaybe (Fail e)    = Just e
-toMaybe Done        = Nothing
-toMaybe (Prod _ as) = toMaybe as
-
--- | A machine can be analysed while it is accepting input in order to extract
--- some information. This function takes a machine and a function that extracts
--- data and produces output. On failure, the machine state and input are
--- produced. Note that when an input is not in the machine's alphabet,
--- then there is no transition, and so no output is produced in response
--- to that input.
-analyse :: Machine s i          -- ^ The machine used
-        -> (s -> i -> Maybe o)  -- ^ An extraction function that may produce output
-        -> [i]                  -- ^ A list of input
-        -> Process (s, i) o     -- ^ A process that produces output
-analyse machine extract is = go (initial machine) is
- where
-  -- go :: s -> [i] -> Process (s, i) o
-  go _ [] = Done
-  go s (i:is)
-    | final machine s = Done
-    | alpha machine i =
-        case delta machine s i of
-          Nothing -> Fail (s, i)
-          Just s' ->
-            case extract s i of
-              Nothing -> go s' is
-              Just o  -> Prod o (go s' is)
-    | otherwise = go s is
-
--- | Machines sometimes need to operate on coarser input than they are defined
--- for. This function takes a function that refines input and a machine that
--- works on refined input, and produces a machine that can work on coarse input.
-refineM :: (i -> j) -> Machine s j -> Machine s i
-refineM refine machine = Machine
-  { initial = initial machine
-  , final   = final machine
-  , alpha   = alpha machine . refine
-  , delta   = \s -> delta machine s . refine
-  }
-
---------------------------------------------------------------------------------
--- | This function produces a process that outputs all the states that a
--- machine goes through.
-simulate :: Machine s i -> [i] -> Process (s, i) (s, i)
-simulate machine = analyse machine (\s i -> delta machine s i >>= \s' -> return (s', i))
-
---------------------------------------------------------------------------------
--- | A state augmented by Timestamp information is held in `profileState`.
--- When the state changes, `profileMap` stores a map between each state
--- and its cumulative time.
-data Profile s = Profile
-  { profileState :: s               -- ^ The current state
-  , profileTime  :: Timestamp       -- ^ The entry time of the state
-  } deriving (Show)
-
--- | This function takes a machine and profiles its state.
-profileM :: Ord s
-         => (i -> Timestamp)
-         -> Machine s i
-         -> Machine (Profile s) i
-profileM timer machine = Machine
-  { initial = Profile (initial machine) 0
-  , final   = final machine . profileState
-  , alpha   = alpha machine
-  , delta   = profileMDelta
-  }
- where
-  profileMDelta (Profile s _) i = do
-    s' <- delta machine s i
-    return $ Profile s' (timer i)
-
--- | extractProfile returns the state, the time this state was made,
--- and the time spent in this state.
-extractProfile :: (i -> Timestamp)                -- ^ Extracts current timestamp
-               -> Profile s                       -- ^ A profiled state
-               -> i                               -- ^ Some input
-               -> Maybe (s, Timestamp, Timestamp) -- ^ (state, currentTime, elapsedTime)
-extractProfile timer p i = Just (profileState p, profileTime p, timer i - profileTime p)
-
-profile :: (Ord s, Eq s)
-        => Machine s i       -- ^ A machine to profile
-        -> (i -> Timestamp)  -- ^ Converts input to timestamps
-        -> [i]               -- ^ The list of input
-        -> Process (Profile s, i) (s, Timestamp, Timestamp)
-profile machine timer =
-  analyse (profileM timer machine)
-          (extractProfile timer)
-
-profileIndexed :: (Ord k, Ord s, Eq s)
-               => Machine s i
-               -> (i -> Maybe k)
-               -> (i -> Timestamp)
-               -> [i]
-               -> Process (Map k (Profile s), i) (k, (s, Timestamp, Timestamp))
-profileIndexed machine index timer =
-  analyse (indexM index (profileM timer machine))
-          (extractIndexed (extractProfile timer) index)
-
-extractIndexed :: Ord k => (s -> i -> Maybe o) -> (i -> Maybe k) -> (Map k s -> i -> Maybe (k, o))
-extractIndexed extract index m i = do
-  k <- index i
-  s <- M.lookup k m
-  o <- extract s i
-  return (k, o)
-
--- | An indexed machine takes a function that multiplexes the input to a key
--- and then takes a machine description to an indexed machine.
-indexM :: Ord k
-       => (i -> Maybe k)        -- ^ An indexing function
-       -> Machine s i           -- ^ A machine to index with
-       -> Machine (Map k s) i   -- ^ The indexed machine
-indexM index machine = Machine
-  { initial = M.empty
-  , final   = indexMFinal
-  , alpha   = indexMAlpha
-  , delta   = indexMDelta
-  }
- where
-  -- An indexer never reaches a final state: it is always possible that
-  -- an event comes along that is accepted by a machine that is not
-  -- yet in in the index.
-  --
-  -- An alternative view is that the indexer is in a final state if all its
-  -- elements are, but this would not allow the creation of new indexes:
-  --     indexMFinal m = not (M.null m) && (all (final machine) . M.elems $ m)
-  indexMFinal = const False
-
-  -- The alphabet of the indexer is that of its elements.
-  indexMAlpha = alpha machine
-
-  -- If the index is not yet in the mapping, we start a new machine in its
-  -- initial state. The indexer fails if indexed state fails.
-  indexMDelta m i = do
-    k <- index i
-    let state = fromMaybe (initial machine) (M.lookup k m)
-    state' <- delta machine state i
-    return $ M.insert k state' m
-
-profileRouted :: (Ord k, Ord s, Eq s, Eq r)
-              => Machine s i
-              -> Machine r i
-              -> (r -> i -> Maybe k)
-              -> (i -> Timestamp)
-              -> [i]
-              -> Process ((Map k (Profile s), r), i) (k, (s, Timestamp, Timestamp))
-profileRouted machine router index timer =
-  analyse (routeM router index (profileM timer machine))
-          (extractRouted (extractProfile timer) index)
-
-extractRouted :: Ord k => (s -> i -> Maybe o) -> (r -> i -> Maybe k) -> ((Map k s, r)  -> i -> Maybe (k, o))
-extractRouted extract index (m, r) i = do
-  k <- index r i
-  s <- M.lookup k m
-  o <- extract s i
-  return (k, o)
-
-
--- | A machine can be indexed not only by the inputs, but also by the state
--- of an intermediary routing machine. This is a generalisation of indexM.
-routeM :: (Ord k)
-       => Machine r i
-       -> (r -> i -> Maybe k)
-       -> Machine s i
-       -> Machine (Map k s, r) i
-routeM router index machine = Machine
-  { initial = (M.empty, initial router)
-  , final   = routeMFinal
-  , alpha   = routeMAlpha
-  , delta   = routeMDelta
-  }
- where
-  -- As with indexers, there is no final state.
-  routeMFinal = const False
-
-  -- The alphabet is that of the router combined with the machine
-  routeMAlpha i = alpha router i || alpha machine i
-
-  routeMDelta (m, r) i = do
-    r' <- if alpha router i
-          then delta router r i
-          else return r
-    m' <- if alpha machine i
-          then case index r' i of
-            Just k -> do
-              s' <- delta machine (fromMaybe (initial machine) (M.lookup k m)) i
-              return $ M.insert k s' m
-            Nothing -> return m
-          else return m
-    return (m', r')
diff --git a/GHC/RTS/Events/Analysis/Capability.hs b/GHC/RTS/Events/Analysis/Capability.hs
deleted file mode 100644
--- a/GHC/RTS/Events/Analysis/Capability.hs
+++ /dev/null
@@ -1,209 +0,0 @@
-module GHC.RTS.Events.Analysis.Capability
-  ( capabilityThreadPoolMachine
-  , capabilityThreadRunMachine
-  , capabilityThreadIndexer
-  , capabilityTaskPoolMachine
-  , capabilityTaskOSMachine
-  )
- where
-
-import GHC.RTS.Events
-import GHC.RTS.Events.Analysis
-
-import Data.Map (Map)
-import qualified Data.Map as M
-
--- | This state machine tracks threads residing on capabilities.
--- Each thread can only reside on one capability, but can be migrated between
--- them.
-capabilityThreadPoolMachine :: Machine (Map ThreadId Int) CapEvent
-capabilityThreadPoolMachine = Machine
-  { initial = M.empty
-  , final   = const False
-  , alpha   = capabilityThreadPoolMachineAlpha
-  , delta   = capabilityThreadPoolMachineDelta
-  }
- where
-  capabilityThreadPoolMachineAlpha capEvent = case spec . ce_event $ capEvent of
-     (CreateThread _)    -> True
-     (StopThread _ _)    -> True
-     (MigrateThread _ _) -> True
-     _                   -> False
-
-  capabilityThreadPoolMachineDelta mapping capEvent = do
-    capId <- ce_cap capEvent
-    case spec . ce_event $ capEvent of
-      (CreateThread threadId)              -> insertThread threadId capId mapping
-      (StopThread threadId ThreadFinished) -> deleteThread threadId mapping
-      (StopThread _ _)                     -> Just mapping
-      (MigrateThread threadId capId')      -> deleteThread threadId mapping >>=
-                                                insertThread threadId capId'
-      _                                    -> Nothing
-   where
-    insertThread :: ThreadId -> Int -> Map ThreadId Int -> Maybe (Map ThreadId Int)
-    insertThread threadId capId m
-      | threadId `M.member` m = Nothing -- The thread already exists
-      | otherwise             = Just $ M.insert threadId capId m
-
-    deleteThread :: ThreadId -> Map ThreadId Int -> Maybe (Map ThreadId Int)
-    deleteThread threadId m
-      | threadId `M.notMember` m = Nothing -- The thread doesn't exist
-      | otherwise                = Just $ M.delete threadId m
-
--- | This state machine tracks threads running on capabilities, only one thread
--- may run on a capability at a time.
-capabilityThreadRunMachine :: Machine (Map Int ThreadId) CapEvent
-capabilityThreadRunMachine = Machine
-  { initial = M.empty
-  , final   = const False
-  , alpha   = threadRunAlpha
-  , delta   = threadRunDelta
-  }
- where
-  threadRunAlpha capEvent = case spec . ce_event $ capEvent of
-    -- TODO: can threads be migrated while they are running?
-    -- TODO: take into account paused threads
-    (RunThread _)     -> True
-    (StopThread _ _ ) -> True
-    _                 -> False
-
-  -- The indexer fails if a thread is inserted where one already exists,
-  -- or if a thread is deleted that doesn't exist.
-  threadRunDelta mapping e = do
-    capId <- ce_cap e
-    case spec . ce_event $ e of
-      (RunThread threadId)     -> runThread capId threadId mapping
-      (StopThread threadId _ ) -> stopThread threadId mapping
-      _                        -> Just mapping
-   where
-    runThread :: Int -> ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)
-    runThread capId threadId m
-      | capId `M.member` m        = Nothing -- A thread is already on this cap
-      | threadId `elem` M.elems m = Nothing -- This thread is already on a cap
-      | otherwise                 = Just $ M.insert capId threadId m
-    stopThread :: ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)
-    stopThread threadId m
-      | notElem threadId . M.elems $ m = Nothing -- The thread doesn't exist
-      | otherwise                      = Just $ M.filter (/= threadId) m
-
-capabilityThreadIndexer :: Map Int ThreadId -> CapEvent -> Maybe ThreadId
-capabilityThreadIndexer m capEvent = case spec . ce_event $ capEvent of
-  (CreateSparkThread threadId)  -> Just threadId
-  (CreateThread threadId)       -> Just threadId
-  (RunThread threadId)          -> Just threadId
-  (StopThread threadId _)       -> Just threadId
-  (ThreadRunnable threadId)     -> Just threadId
-  (MigrateThread threadId _)    -> Just threadId
-  (WakeupThread threadId capId) -> if Just capId == ce_cap capEvent
-                                   then Just threadId
-                                   else Nothing
-  _                             -> mThreadId
- where
-  mThreadId = ce_cap capEvent >>= (\capId -> M.lookup capId m)
-
--- | This state machine tracks Haskell tasks, represented by TaskId,
--- residing on capabilities.
--- Each Haskell task can only reside on one capability, but can be migrated
--- between them.
-capabilityTaskPoolMachine :: Machine (Map TaskId Int) CapEvent
-capabilityTaskPoolMachine = Machine
-  { initial = M.empty
-  , final   = const False
-  , alpha   = capabilityTaskPoolMachineAlpha
-  , delta   = capabilityTaskPoolMachineDelta
-  }
- where
-  capabilityTaskPoolMachineAlpha capEvent = case spec . ce_event $ capEvent of
-     TaskCreate{}  -> True
-     TaskDelete{}  -> True
-     TaskMigrate{} -> True
-     _             -> False
-
-  capabilityTaskPoolMachineDelta mapping capEvent = do
-    case spec . ce_event $ capEvent of
-      TaskCreate {taskId, cap}           -> insertTask taskId cap mapping
-      TaskDelete {taskId}                -> deleteTask taskId Nothing mapping
-      TaskMigrate {taskId, cap, new_cap} ->
-        deleteTask taskId (Just cap) mapping >>=
-          insertTask taskId new_cap
-      _                                  -> Nothing
-   where
-    insertTask :: TaskId -> Int -> Map TaskId Int
-               -> Maybe (Map TaskId Int)
-    insertTask taskId cap m
-      | taskId `M.member` m = Nothing  -- The task already exists.
-      | otherwise           = Just $ M.insert taskId cap m
-
-    deleteTask :: TaskId -> Maybe Int -> Map TaskId Int
-               -> Maybe (Map TaskId Int)
-    deleteTask taskId expectedcap m
-      | Just oldcap <- M.lookup taskId m
-      , maybe True (==oldcap) expectedcap
-      = Just $ M.delete taskId m
-      | otherwise
-      = Nothing  -- The task doesn't exist, or does but with an unexpected cap.
-
--- | This state machine tracks Haskell tasks (represented by the KernelThreadId
--- of their OS thread) residing on capabilities and additionally
--- tracks the (immutable) assignment of OS thread ids (KernelThreadId)
--- to tasks ids (TaskId).
--- Each Haskell task can only reside on one capability, but can be migrated
--- between them.
---
--- Invariant for the @(Map KernelThreadId Int, Map TaskId KernelThreadId)@ 
--- type: the second map is an injection (verified by the machine 
--- in 'insertTaskOS') and the following sets are equal: 
--- keys of the fist map and values of the second
--- (follows from the construction of the maps by the machine).
---
--- The machine verifies as much as 'capabilityTaskPoolMachine' and additionally
--- the data invariant, and offers a richer verification profile.
-capabilityTaskOSMachine :: Machine (Map KernelThreadId Int,
-                                    Map TaskId KernelThreadId)
-                                   CapEvent
-capabilityTaskOSMachine = Machine
-  { initial = (M.empty, M.empty)
-  , final   = const False
-  , alpha   = capabilityTaskOSMachineAlpha
-  , delta   = capabilityTaskOSMachineDelta
-  }
- where
-  capabilityTaskOSMachineAlpha capEvent = case spec . ce_event $ capEvent of
-     TaskCreate{}  -> True
-     TaskDelete{}  -> True
-     TaskMigrate{} -> True
-     _             -> False
-
-  capabilityTaskOSMachineDelta mapping capEvent = do
-    case spec . ce_event $ capEvent of
-      TaskCreate {taskId, cap, tid} -> insertTaskOS taskId cap tid mapping
-      TaskDelete {taskId}           -> deleteTaskOS taskId mapping
-      TaskMigrate {taskId, new_cap} -> migrateTaskOS taskId new_cap mapping
-      _                             -> Nothing
-   where
-    insertTaskOS :: TaskId -> Int -> KernelThreadId
-                 -> (Map KernelThreadId Int, Map TaskId KernelThreadId)
-                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)
-    insertTaskOS taskId cap tid (m, ma)
-      | taskId `M.member` ma = Nothing  -- The task already exists.
-      | tid `M.member` m     = Nothing  -- The OS thread already exists.
-      | otherwise            = Just (M.insert tid cap m,
-                                     M.insert taskId tid ma)
-
-    deleteTaskOS :: TaskId -> (Map KernelThreadId Int,
-                               Map TaskId KernelThreadId)
-                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)
-    deleteTaskOS taskId (m, ma) =
-      case M.lookup taskId ma of
-        Nothing  -> Nothing  -- The task doesn't exist.
-        Just tid -> Just (M.delete tid m,
-                          M.delete taskId ma)
-
-    migrateTaskOS :: TaskId -> Int -> (Map KernelThreadId Int,
-                                       Map TaskId KernelThreadId)
-                  -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)
-    migrateTaskOS taskId new_cap (m, ma) =
-      case M.lookup taskId ma of
-        Nothing -> Nothing  -- The task doesn't exist.
-        Just tid -> Just (M.insert tid new_cap m,
-                          ma)  -- The assignment is immutable.
diff --git a/GHC/RTS/Events/Analysis/SparkThread.hs b/GHC/RTS/Events/Analysis/SparkThread.hs
deleted file mode 100644
--- a/GHC/RTS/Events/Analysis/SparkThread.hs
+++ /dev/null
@@ -1,114 +0,0 @@
-module GHC.RTS.Events.Analysis.SparkThread
-  ( SparkThreadState (..)
-  , sparkThreadMachine
-  , capabilitySparkThreadMachine
-  , capabilitySparkThreadIndexer
-  )
- where
-
-import GHC.RTS.Events
-import GHC.RTS.Events.Analysis
-
-import Data.Map (Map)
-import qualified Data.Map as M
-import Data.Set (Set)
-import qualified Data.Set as S
-
-import Debug.Trace
-
-data SparkThreadState
-  = SparkThreadInitial
-  | SparkThreadCreated
-  | SparkThreadRunning Int
-  | SparkThreadPaused Int
-  | SparkThreadFinal
-  deriving (Eq, Ord, Show)
-
-sparkThreadMachine :: Machine SparkThreadState EventInfo
-sparkThreadMachine = Machine
-  { initial = SparkThreadInitial
-  , final   = sparkThreadFinal
-  , alpha   = sparkThreadAlpha
-  , delta   = sparkThreadDelta
-  }
- where
-  sparkThreadFinal SparkThreadFinal = True
-  sparkThreadFinal _                = False
-
-  -- sparkThreadAlpha (CreateSparkThread _) = True
-  sparkThreadAlpha (RunThread _)         = True
-  sparkThreadAlpha (StopThread _ _)      = True
-  sparkThreadAlpha SparkRun              = True
-  sparkThreadAlpha (SparkSteal _)        = True
-  sparkThreadAlpha _                     = False
-
-  -- SparkThreadInitial
-  -- sparkThreadDelta SparkThreadInitial (CreateSparkThread _) = Just SparkThreadInitial
-  sparkThreadDelta SparkThreadInitial (RunThread _)         = Just SparkThreadCreated
-  -- SparkThreadCreated
-  sparkThreadDelta SparkThreadCreated SparkRun                      = Just (SparkThreadRunning 0)
-  sparkThreadDelta SparkThreadCreated (SparkSteal _)                = Just (SparkThreadRunning 0)
-  sparkThreadDelta SparkThreadCreated (StopThread _ ThreadFinished) = Just SparkThreadFinal
-  -- SparkThreadRunning
-  sparkThreadDelta (SparkThreadRunning n) (StopThread _ ThreadFinished) = Just SparkThreadFinal
-  sparkThreadDelta (SparkThreadRunning n) (StopThread _ _)              = Just (SparkThreadPaused n)
-  sparkThreadDelta (SparkThreadRunning n) SparkRun                      = Just (SparkThreadRunning (n+1))
-  sparkThreadDelta (SparkThreadRunning n) (SparkSteal _)                = Just (SparkThreadRunning (n+1))
-  -- SparkThreadPaused
-  sparkThreadDelta (SparkThreadPaused n) (RunThread _) = Just (SparkThreadRunning n)
-  -- Other
-  sparkThreadDelta _ _ = Nothing
-
-capabilitySparkThreadMachine :: Machine (Map Int ThreadId, Set ThreadId) CapEvent
-capabilitySparkThreadMachine = Machine
-  { initial = (M.empty, S.empty)
-  , final   = const False
-  , alpha   = capabilitySparkThreadAlpha
-  , delta   = capabilitySparkThreadDelta
-  }
- where
-  capabilitySparkThreadAlpha capEvent = case spec . ce_event $ capEvent of
-    (CreateSparkThread _)         -> True
-    (RunThread _)                 -> True
-    (StopThread _ _)              -> True
-    _                             -> False
-  capabilitySparkThreadDelta (m, s) e = do
-    capId <- ce_cap e
-    case spec . ce_event $ e of
-      (CreateSparkThread threadId)         -> createThread threadId
-      -- (StopThread threadId ThreadFinished) -> stopThread threadId
-      (StopThread threadId _)              -> pauseThread threadId
-      (RunThread threadId)                 -> runThread capId threadId
-      _                                    -> Just (m, s)
-   where
-    createThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
-    createThread threadId
-      | S.member threadId s = Nothing -- A spark thread with this Id already created
-      | otherwise           = Just (m, S.insert threadId s)
-
-    runThread :: Int -> ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
-    runThread capId threadId
-      | M.member capId m          = Nothing      -- A thread is already on this cap
-      | threadId `elem` M.elems m = Nothing      -- This thread is already on a cap
-      | S.notMember threadId s    = Just (m, s)  -- Not a spark thread
-      | otherwise                 = Just (M.insert capId threadId m, S.insert threadId s)
-
-    stopThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
-    stopThread threadId = Just (M.filter (/= threadId) m, S.delete threadId s)
-
-    pauseThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
-    pauseThread threadId = Just (M.filter (/= threadId) m, s)
-
-capabilitySparkThreadIndexer :: (Map Int ThreadId, Set ThreadId) -> CapEvent -> Maybe ThreadId
-capabilitySparkThreadIndexer (m, s) capEvent = case spec . ce_event $ capEvent of
-  (CreateThread threadId)   -> inSparkThreadPool threadId
-  (RunThread threadId)      -> inSparkThreadPool threadId
-  (StopThread threadId _)   -> inSparkThreadPool threadId
-  -- (WakeupThread threadId _) -> inSparkThreadPool threadId
-  _                         -> ce_cap capEvent >>= (\capId -> M.lookup capId m)
- where
-  inSparkThreadPool :: ThreadId -> Maybe ThreadId
-  inSparkThreadPool threadId
-    | S.member threadId s = Just threadId
-    | otherwise           = Nothing
-
diff --git a/GHC/RTS/Events/Analysis/Thread.hs b/GHC/RTS/Events/Analysis/Thread.hs
deleted file mode 100644
--- a/GHC/RTS/Events/Analysis/Thread.hs
+++ /dev/null
@@ -1,53 +0,0 @@
-module GHC.RTS.Events.Analysis.Thread
-  ( ThreadState (..)
-  , threadMachine
-  )
- where
-
-import GHC.RTS.Events
-import GHC.RTS.Events.Analysis
-
---------------------------------------------------------------------------------
--- | This datatype defines the state machine for a single thread.
-data ThreadState
-  = ThreadInitial
-  | ThreadQueued
-  | ThreadRunning
-  | ThreadStopped
-  | ThreadFinal
-  deriving (Show, Eq, Ord)
-
--- | This state machine tracks the events processed by a thread.
-threadMachine :: Machine ThreadState EventInfo
-threadMachine = Machine
-  { initial = ThreadInitial
-  , final   = threadFinal
-  , alpha   = threadAlpha
-  , delta   = threadDelta
-  }
- where
-  threadFinal ThreadFinal   = True
-  threadFinal _             = False
-
-  threadAlpha (CreateThread _)   = True
-  threadAlpha (RunThread _)      = True
-  threadAlpha (StopThread _ _)   = True
-  threadAlpha (WakeupThread _ _) = True
-  threadAlpha _                  = False
-
-  -- ThreadInitial
-  threadDelta ThreadInitial (CreateThread _) = Just ThreadQueued
-  -- ThreadQueued
-  threadDelta ThreadQueued (RunThread _)      = Just ThreadRunning
-  threadDelta ThreadQueued (WakeupThread _ _) = Just ThreadQueued
-  -- ThreadRunning
-  threadDelta ThreadRunning (StopThread _ StackOverflow)  = Just ThreadQueued
-  threadDelta ThreadRunning (StopThread _ HeapOverflow)   = Just ThreadQueued
-  threadDelta ThreadRunning (StopThread _ ForeignCall)    = Just ThreadQueued
-  threadDelta ThreadRunning (StopThread _ ThreadFinished) = Just ThreadFinal
-  threadDelta ThreadRunning (StopThread _ _)              = Just ThreadStopped
-  -- ThreadStopped
-  threadDelta ThreadStopped (RunThread _)      = Just ThreadRunning
-  threadDelta ThreadStopped (WakeupThread _ _) = Just ThreadQueued
-  -- Unknown
-  threadDelta _ _ = Nothing
diff --git a/GHC/RTS/Events/Merge.hs b/GHC/RTS/Events/Merge.hs
deleted file mode 100644
--- a/GHC/RTS/Events/Merge.hs
+++ /dev/null
@@ -1,118 +0,0 @@
-{-# OPTIONS_GHC -funbox-strict-fields #-}
-
-module GHC.RTS.Events.Merge (mergeEventLogs) where
-
-import GHC.RTS.Events
-import Data.Monoid
-import Data.List (foldl')
-import qualified Data.Map as M
-import Data.Word (Word32, Word16)
-
--- TODO: add a merge mode where the events are synchronized using
--- the wall clock time event at the start of both eventlogs (for newer GHCs).
--- Such merge is not associative so we either need to take many arguments
--- or cope with eventlogs with many wall clock time events (assume they
--- are products of previous merges). To decide.
-
-{-
-GHC numbers caps and capsets in sequential order, starting at 0.  Threads are
-similarly numbered, but start at 1.  In order to merge logs 'x' and 'y',
-we find the # of occupied numbers for each variable type in 'x',
-then increment each variable in 'y' by that amount.
-We assume that if a number is occupied, so are all lower numbers.
-This guarantees that variables in each log don't clash,
-and that the meaning of each reference to a thread/cap/capset is
-preserved.
--}
-
-mergeEventLogs :: EventLog -> EventLog -> EventLog
-mergeEventLogs (EventLog h1 (Data xs)) (EventLog h2 (Data ys)) =
-  let headerMap = M.fromList . map (\ et@EventType {num} -> (num, et))
-      m1 = headerMap $ eventTypes h1
-      m2 = headerMap $ eventTypes h2
-      combine et1 et2 | et1 == et2 = et1
-      combine _ _ = error "can't merge eventlogs with inconsistent headers"
-      m = M.unionWith combine m1 m2
-      h = Header $ M.elems m
-  in h == h `seq`  -- Detect inconsistency ASAP.
-     EventLog h . Data . mergeOn time xs $ shift (maxVars xs) ys
-
-mergeOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]
-mergeOn f [] ys = ys
-mergeOn f xs [] = xs
-mergeOn f (x:xs) (y:ys) | f x <= f y = x : mergeOn f xs (y:ys)
-                        | otherwise  = y : mergeOn f (x:xs) ys
-
--- TODO: rename, since these are not maximal values, but numbers of used values
-data MaxVars = MaxVars { mcapset :: !Word32
-                       , mcap :: !Int
-                       , mthread :: !ThreadId }
--- TODO introduce parallel RTS process and machine var.s
-
-instance Monoid MaxVars where
-    mempty  = MaxVars 0 0 0
-    mappend (MaxVars a b c) (MaxVars x y z) =
-      MaxVars (max a x) (b + y) (max c z)
-    -- avoid space leaks:
-    mconcat = foldl' mappend mempty
-
--- Capabilities are represented as Word16.  An event block marked with the
--- capability of 0xffff belongs to no capability
-isCap :: Int -> Bool
-isCap x = fromIntegral x /= ((-1) :: Word16)
-
--- For caps we find the maximum value by summing the @Startup@ declarations.
--- TODO: it's not trivial to add CapCreate since we don't know
--- if created caps are guaranteed to be numbered consecutively or not
--- (are they? is it asserted in GHC code somewhere?). We might instead
--- just scan all events mentioning a cap and take the maximum,
--- but it's a slower and much longer code, requiring constant maintenance.
-maxVars :: [Event] -> MaxVars
-maxVars = mconcat . map (maxSpec . spec)
- where
-    -- only checking binding sites right now, sufficient?
-    maxSpec (Startup n) = mempty { mcap = n }
-    -- Threads start at 1.
-    maxSpec (CreateThread t) = mempty { mthread = t }
-    maxSpec (CreateSparkThread t) = mempty { mthread = t }
-    -- Capsets start at 0.
-    maxSpec (CapsetCreate cs _) = mempty {mcapset = cs + 1 }
-    maxSpec (EventBlock _ _ es) = maxVars es
-    maxSpec _  = mempty
-
-sh :: Num a => a -> a -> a
-sh x y = x + y
-
-shift :: MaxVars -> [Event] -> [Event]
-shift mv@(MaxVars mcs mc mt) = map (\(Event t s) -> Event t $ shift' s)
- where
-    -- -1 marks a block that isn't attached to a particular capability
-    shift' (EventBlock et c bs) = EventBlock et (msh c) $ shift mv bs
-     where msh x = if isCap x then sh mc x else x
-    shift' (CreateThread t) = CreateThread $ sh mt t
-    shift' (RunThread t) = RunThread $ sh mt t
-    shift' (StopThread t s) = StopThread (sh mt t) s
-    shift' (ThreadRunnable t) = ThreadRunnable $ sh mt t
-    shift' (MigrateThread t c) = MigrateThread (sh mt t) (sh mc c)
-    shift' (WakeupThread t c) = WakeupThread (sh mt t) (sh mc c)
-    shift' (ThreadLabel t l) = ThreadLabel (sh mt t) l
-    shift' (CreateSparkThread t) = CreateSparkThread (sh mt t)
-    shift' (SparkSteal c) = SparkSteal (sh mc c)
-    shift' (TaskCreate tk c tid) = TaskCreate tk (sh mc c) tid
-    shift' (TaskMigrate tk c1 c2) = TaskMigrate tk (sh mc c1) (sh mc c2)
-    shift' (CapCreate c) = CapCreate (sh mc c)  -- TODO: correct?
-    shift' (CapDelete c) = CapDelete (sh mc c)  -- TODO: correct?
-    shift' (CapDisable c) = CapDisable (sh mc c)
-    shift' (CapEnable c) = CapEnable (sh mc c)
-    shift' (CapsetCreate cs cst) = CapsetCreate (sh mcs cs) cst
-    shift' (CapsetDelete cs) = CapsetDelete (sh mcs cs)
-    shift' (CapsetAssignCap cs c) = CapsetAssignCap (sh mcs cs) (sh mc c)
-    shift' (CapsetRemoveCap cs c) = CapsetRemoveCap (sh mcs cs) (sh mc c)
-    shift' (RtsIdentifier cs rts) = RtsIdentifier (sh mcs cs) rts
-    shift' (ProgramArgs cs as) = ProgramArgs (sh mcs cs) as
-    shift' (ProgramEnv cs es) = ProgramEnv (sh mcs cs) es
-    shift' (OsProcessPid cs pid) = OsProcessPid (sh mcs cs) pid
-    shift' (OsProcessParentPid cs ppid) = OsProcessParentPid (sh mcs cs) ppid
-    shift' (WallClockTime cs sec nsec) = WallClockTime (sh mcs cs) sec nsec
-    shift' x = x
-    -- TODO extend by new shift for Eden events
diff --git a/GhcEvents.hs b/GhcEvents.hs
--- a/GhcEvents.hs
+++ b/GhcEvents.hs
@@ -1,41 +1,42 @@
 {-# LANGUAGE CPP #-}
+
 module Main where
 
 import GHC.RTS.Events
+import GHC.RTS.Events.Incremental
 import GHC.RTS.Events.Merge
 import GHC.RTS.Events.Analysis
 import GHC.RTS.Events.Analysis.SparkThread
 import GHC.RTS.Events.Analysis.Thread
 import GHC.RTS.Events.Analysis.Capability
 
-import System.Environment
-import Text.Printf
-import Data.List
+import System.Environment (getArgs)
 import Data.Either (rights)
-import Data.Function
-import Data.IntMap (IntMap)
-import Data.Map (Map)
 import qualified Data.Map as M
-import Data.Maybe
 import System.IO
 import System.Exit
 
+main :: IO ()
 main = getArgs >>= command
 
-command ["--help"] = do
-    putStr usage
+command :: [String] -> IO ()
+command ["--help"] = putStr usage
 
+command ["inc", file] = printEventsIncremental False file
+
+command ["inc", "force", file] = printEventsIncremental True file
+
 command ["show", file] = do
-    log <- readLogOrDie file
-    putStrLn $ ppEventLog log
+    evtLog <- readLogOrDie file
+    putStrLn $ ppEventLog evtLog
 
 command ["show", "threads", file] = do
     eventLog <- readLogOrDie file
     let eventTypeMap = buildEventTypeMap . eventTypes . header $ eventLog
-    let capEvents = sortEvents . events . dat $ eventLog
-    let mappings  = rights . validates capabilityThreadRunMachine $ capEvents
-    let indexes = map (uncurry capabilityThreadIndexer) $ zip mappings capEvents
-    let threadMap = M.fromListWith (++) . reverse $ zip indexes (map return capEvents)
+        evts = sortEvents $ events $ dat eventLog
+        mappings  = rights . validates capabilityThreadRunMachine $ evts
+        indexes = zipWith capabilityThreadIndexer mappings evts
+        threadMap = M.fromListWith (++) . reverse $ zip indexes (map return evts)
     putStrLn "Event Types:"
     putStrLn . unlines . map ppEventType . eventTypes . header $ eventLog
     putStrLn "Thread Indexed Events:"
@@ -47,9 +48,9 @@
 command ["show", "caps", file] = do
     eventLog <- readLogOrDie file
     let eventTypeMap = buildEventTypeMap . eventTypes . header $ eventLog
-    let capEvents = sortEvents . events . dat $ eventLog
-    let indexes = map ce_cap capEvents
-    let capMap = M.fromListWith (++) . reverse $ zip indexes (map return capEvents)
+    let evts = sortEvents . events . dat $ eventLog
+        indexes = map evCap evts
+        capMap = M.fromListWith (++) . reverse $ zip indexes (map return evts)
     putStrLn "Event Types:"
     putStrLn . unlines . map ppEventType . eventTypes . header $ eventLog
     putStrLn "Cap Indexed Events:"
@@ -66,11 +67,11 @@
 
 command ["validate", "threads", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
+    let evts = sortEvents . events . dat $ eventLog
     let result = validate (routeM capabilityThreadRunMachine
                                   capabilityThreadIndexer
-                                  (refineM (spec . ce_event) threadMachine))
-                          capEvents
+                                  (refineM evSpec threadMachine))
+                          evts
     putStrLn $ showValidate (\(m, n) ->
                                "\nThread States:\n" ++ showIndexed show show m ++
                                "\nCap States:\n" ++ showIndexed show show n)
@@ -78,110 +79,115 @@
 
 command ["validate", "threadpool", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = validate capabilityThreadPoolMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = validate capabilityThreadPoolMachine evts
     putStrLn $ showValidate show show result
 
 command ["validate", "threadrun", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = validate capabilityThreadRunMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = validate capabilityThreadRunMachine evts
     putStrLn $ showValidate show show result
 
 command ["validate", "taskpool", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = validate capabilityTaskPoolMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = validate capabilityTaskPoolMachine evts
     putStrLn $ showValidate show show result
 
 command ["validate", "tasks", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = validate capabilityTaskOSMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = validate capabilityTaskOSMachine evts
     putStrLn $ showValidate show show result
 
 command ["validate", "sparks", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
+    let evts = sortEvents . events . dat $ eventLog
     let result = validate
                    (routeM capabilitySparkThreadMachine capabilitySparkThreadIndexer
-                     (refineM (spec . ce_event) sparkThreadMachine))
-                   capEvents
+                     (refineM evSpec sparkThreadMachine))
+                   evts
     putStrLn $ showValidate show show result
 
 command ["simulate", "threads", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
+    let evts = sortEvents . events . dat $ eventLog
     let result = simulate (routeM capabilityThreadRunMachine
                                   capabilityThreadIndexer
-                                  (refineM (spec . ce_event) threadMachine))
-                          capEvents
+                                  (refineM evSpec threadMachine))
+                          evts
     putStrLn . showProcess $ result
 
 command ["simulate", "threadpool", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = simulate capabilityThreadPoolMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = simulate capabilityThreadPoolMachine evts
     putStrLn . showProcess $ result
 
 command ["simulate", "threadrun", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = simulate capabilityThreadRunMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = simulate capabilityThreadRunMachine evts
     putStrLn . showProcess $ result
 
 command ["simulate", "taskpool", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = simulate capabilityTaskPoolMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = simulate capabilityTaskPoolMachine evts
     putStrLn . showProcess $ result
 
 command ["simulate", "tasks", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
-    let result = simulate capabilityTaskOSMachine capEvents
+    let evts = sortEvents . events . dat $ eventLog
+    let result = simulate capabilityTaskOSMachine evts
     putStrLn . showProcess $ result
 
 command ["simulate", "sparks", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
+    let evts = sortEvents . events . dat $ eventLog
     let result = simulate
               (routeM capabilitySparkThreadMachine
                   capabilitySparkThreadIndexer
-                  (refineM (spec . ce_event) sparkThreadMachine))
-              capEvents
+                  (refineM evSpec sparkThreadMachine)) evts
     putStrLn . showProcess $ result
 
 command ["profile", "threads", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
+    let evts = sortEvents . events . dat $ eventLog
     let result = profileRouted
-                   (refineM (spec. ce_event) threadMachine)
+                   (refineM evSpec threadMachine)
                    capabilityThreadRunMachine
-                   capabilityThreadIndexer
-                   (time . ce_event)
-                   capEvents
+                   capabilityThreadIndexer evTime evts
     putStrLn . showProcess $ result
 
 command ["profile", "sparks", file] = do
     eventLog <- readLogOrDie file
-    let capEvents = sortEvents . events . dat $ eventLog
+    let evts = sortEvents . events . dat $ eventLog
     let result = profileRouted
-                   (refineM (spec . ce_event) sparkThreadMachine)
+                   (refineM evSpec sparkThreadMachine)
                    capabilitySparkThreadMachine
                    capabilitySparkThreadIndexer
-                   (time . ce_event)
-                   capEvents
+                   evTime evts
     putStrLn . showProcess $ result
 
 command _ = putStr usage >> die "Unrecognized command"
 
+readLogOrDie :: FilePath -> IO EventLog
+readLogOrDie file = do
+    e <- readEventLogFromFile file
+    case e of
+        Left s    -> die ("Failed to parse " ++ file ++ ": " ++ s)
+        Right evtLog -> return evtLog
+
+usage :: String
 usage = unlines $ map pad strings
  where
     align = 4 + (maximum . map (length . fst) $ strings)
     pad (x, y) = zipWith const (x ++ repeat ' ') (replicate align ()) ++ y
     strings = [ ("ghc-events --help:",                     "Display this help.")
-
+              , ("ghc-events inc <file>:",                 "Pretty print an event log incrementally")
+              , ("ghc-events inc force <file>:",           "Pretty print an event log incrementally. Retry on incomplete input (aka 'tail -f').")
               , ("ghc-events show <file>:",                "Pretty print an event log.")
               , ("ghc-events show threads <file>:",        "Pretty print an event log, ordered by threads.")
               , ("ghc-events show caps <file>:",           "Pretty print an event log, ordered by capabilities.")
@@ -206,23 +212,13 @@
               , ("ghc-events profile sparks <file>:",      "Profile spark thread states.")
               ]
 
-readLogOrDie file = do
-    e <- readEventLogFromFile file
-    case e of
-        Left s    -> die ("Failed to parse " ++ file ++ ": " ++ s)
-        Right log -> return log
-
-#if ! MIN_VERSION_base(4,8,0)
-die s = do hPutStrLn stderr s; exitWith (ExitFailure 1)
-#endif
-
 showValidate :: (s -> String) -> (i -> String) -> Either (s, i) s -> String
 showValidate showState showInput (Left (state, input)) =
   "Invalid eventlog:"
-  ++ "\nState:\n" ++ ( showState state )
-  ++ "\nInput:\n" ++ ( showInput input )
+  ++ "\nState:\n" ++ showState state
+  ++ "\nInput:\n" ++ showInput input
 showValidate showState _ (Right state) =
-  "Valid eventlog: " ++ ( showState state )
+  "Valid eventlog: " ++ showState state
 
 showProcess :: (Show e, Show a) => Process e a -> String
 showProcess process =
@@ -231,12 +227,12 @@
   ++ "\n"
   ++ (maybe "Valid." (("Invalid:\n" ++) . show) . toMaybe) process
 
-showIndexed :: (k -> String) -> (v -> String) -> Map k v -> String
+showIndexed :: (k -> String) -> (v -> String) -> M.Map k v -> String
 showIndexed showKey showValue m
   | M.null m  = "Empty map\n"
   | otherwise = "Indexed output:\n" ++
-      concatMap (\(k, v) -> "Key: " ++ ( showKey k ) ++ ", Value: "
-          ++ ( showValue v ) ++ "\n")
+      concatMap (\(k, v) -> "Key: " ++ showKey k ++ ", Value: "
+          ++ showValue v ++ "\n")
         (M.toList m)
 
 showMap :: Ord k => (k -> String) -> (a -> String) -> M.Map k a -> String
@@ -244,3 +240,8 @@
   concat $ zipWith (++)
     (map showKey . M.keys $ m :: [String])
     (map (showValue . (M.!) m) . M.keys $ m :: [String])
+
+#if !MIN_VERSION_base(4,8,0)
+die :: String -> IO a
+die err = hPutStrLn stderr err >> exitFailure
+#endif
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# ghc-events
+[![Build Status](https://travis-ci.org/haskell/ghc-events.svg?branch=master)](https://travis-ci.org/haskell/ghc-events)
+[![Hackage](https://img.shields.io/hackage/v/ghc-events.svg)](https://hackage.haskell.org/package/ghc-events)
+[![Hackage-Deps](https://img.shields.io/hackage-deps/v/ghc-events.svg)](http://packdeps.haskellers.com/feed?needle=ghc-events)
+
+A Haskell library for parsing .eventlog files emitted by the GHC runtime system.
+The package also includes an executable, `ghc-events` that can be used to display the contents of .eventlog files
+
+## TODO
+* Add example usage/tutorial of the new API to this readme
+
+## Known Issues
+* Writing event logs back to file does not work. It is hard to say how long has this been broken or how difficult will it be to fix ([#14](https://github.com/haskell/ghc-events/issues/14))
diff --git a/ghc-events.cabal b/ghc-events.cabal
--- a/ghc-events.cabal
+++ b/ghc-events.cabal
@@ -1,5 +1,5 @@
 name:             ghc-events
-version:          0.4.4.0
+version:          0.6.0
 synopsis:         Library and tool for parsing .eventlog files from GHC
 description:      Parses .eventlog files emitted by GHC 6.12.1 and later.
                   Includes the ghc-events tool permitting, in particular,
@@ -7,7 +7,7 @@
 category:         Development, GHC, Debug, Profiling, Trace
 license:          BSD3
 license-file:     LICENSE
-author:           Donnie Jones <donnie@darthik.com>, 
+author:           Donnie Jones <donnie@darthik.com>,
                   Simon Marlow <marlowsd@gmail.com>,
                   Paul Bone <pbone@csse.unimelb.edu.au>,
                   Mischa Dieterle <dieterle@mathematik.uni-marburg.de>,
@@ -16,14 +16,32 @@
                   Nicolas Wu <nick@well-typed.com>,
                   Jost Berthold <berthold@diku.dk>
                   Mikolaj Konarski <mikolaj@well-typed.com>
+                  Karolis Velicka <karolis.velicka@gmail.com>
 maintainer:       Simon Marlow <marlowsd@gmail.com>
-bug-reports:      https://github.com/haskell/ThreadScope/issues
+bug-reports:      https://github.com/haskell/ghc-events/issues
 build-type:       Simple
-tested-with:      GHC == 6.12.3, GHC == 7.4.1, GHC == 7.6.1, GHC == 7.6.3, GHC == 7.8.2, GHC == 7.8.3, GHC == 7.10.1
+tested-with:      GHC == 7.6.1, GHC == 7.6.3, GHC == 7.8.2, GHC == 7.8.3, GHC == 7.10.1,
+                  GHC == 8.0.2
 cabal-version:    >= 1.8
-extra-source-files: GHC/RTS/EventLogFormat.h,
-                    test/*.eventlog
+extra-source-files: include/EventLogFormat.h
+                    test/queens-ghc-6.12.1.eventlog
+                    test/queens-ghc-6.12.1.eventlog.reference
+                    test/queens-ghc-7.0.2.eventlog
+                    test/queens-ghc-7.0.2.eventlog.reference
+                    test/mandelbrot-mmc-2011-06-14.eventlog
+                    test/mandelbrot-mmc-2011-06-14.eventlog.reference
+                    test/parallelTest.eventlog
+                    test/parallelTest.eventlog.reference
+                    test/pre77stop.eventlog
+                    test/pre77stop.eventlog.reference
+                    test/782stop.eventlog
+                    test/782stop.eventlog.reference
+                    test/783stop.eventlog
+                    test/783stop.eventlog.reference
+                    test/Utils.hs
                     test/stop.hs
+                    README.md
+                    CHANGELOG.md
 
 source-repository head
   type: git
@@ -31,12 +49,12 @@
 
 library
   build-depends:    base       == 4.*,
-                    mtl        >= 2.2.1 && < 3.0,
-                    containers >= 0.2 && < 0.6,
-                    binary     >= 0.5 && < 0.8,
-                    bytestring >= 0.9.0,
+                    containers >= 0.5 && < 0.6,
+                    binary     >= 0.7 && < 0.10,
+                    bytestring >= 0.10.4,
                     array      >= 0.2 && < 0.6
   exposed-modules:  GHC.RTS.Events,
+                    GHC.RTS.Events.Incremental
                     GHC.RTS.Events.Merge
                     GHC.RTS.Events.Analysis
                     GHC.RTS.Events.Analysis.Capability
@@ -44,17 +62,31 @@
                     GHC.RTS.Events.Analysis.Thread
   other-modules:    GHC.RTS.EventParserUtils,
                     GHC.RTS.EventTypes
-  include-dirs:     GHC/RTS
+                    GHC.RTS.Events.Binary
+  hs-source-dirs:   src
+  include-dirs:     include
   extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards
   other-extensions: FlexibleContexts, CPP
+  ghc-options:      -Wall
 
 executable ghc-events
   main-is:          GhcEvents.hs
-  build-depends:    base, mtl, containers, binary, bytestring, array
+  build-depends:    ghc-events, base, containers
   extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards
 
 test-suite test-versions
   type:             exitcode-stdio-1.0
-  main-is:          test/TestVersions.hs
-  build-depends:    base, mtl, containers, binary, bytestring, array
+  main-is:          TestVersions.hs
+  other-modules:    Utils
+  hs-source-dirs:   ., test
+  build-depends:    ghc-events, base
   extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards
+
+test-suite write-merge
+  type:             exitcode-stdio-1.0
+  main-is:          WriteMerge.hs
+  other-modules:    Utils
+  hs-source-dirs:   ., test
+  build-depends:    ghc-events, base, bytestring
+  extensions:	    RecordWildCards, NamedFieldPuns, BangPatterns, PatternGuards
+  buildable:        False
diff --git a/include/EventLogFormat.h b/include/EventLogFormat.h
new file mode 100644
--- /dev/null
+++ b/include/EventLogFormat.h
@@ -0,0 +1,312 @@
+/* -----------------------------------------------------------------------------
+ *
+ * (c) The GHC Team, 2008-2012
+ *
+ * Event log format
+ * 
+ * The log format is designed to be extensible: old tools should be
+ * able to parse (but not necessarily understand all of) new versions
+ * of the format, and new tools will be able to understand old log
+ * files.
+ * 
+ * Each event has a specific format.  If you add new events, give them
+ * new numbers: we never re-use old event numbers.
+ *
+ * - The format is endian-independent: all values are represented in 
+ *    bigendian order.
+ *
+ * - The format is extensible:
+ *
+ *    - The header describes each event type and its length.  Tools
+ *      that don't recognise a particular event type can skip those events.
+ *
+ *    - There is room for extra information in the event type
+ *      specification, which can be ignored by older tools.
+ *
+ *    - Events can have extra information added, but existing fields
+ *      cannot be changed.  Tools should ignore extra fields at the
+ *      end of the event record.
+ *
+ *    - Old event type ids are never re-used; just take a new identifier.
+ *
+ *
+ * The format
+ * ----------
+ *
+ * log : EVENT_HEADER_BEGIN
+ *       EventType*
+ *       EVENT_HEADER_END
+ *       EVENT_DATA_BEGIN
+ *       Event*
+ *       EVENT_DATA_END
+ *
+ * EventType :
+ *       EVENT_ET_BEGIN
+ *       Word16         -- unique identifier for this event
+ *       Int16          -- >=0  size of the event in bytes (minus the header)
+ *                      -- -1   variable size
+ *       Word32         -- length of the next field in bytes
+ *       Word8*         -- string describing the event
+ *       Word32         -- length of the next field in bytes
+ *       Word8*         -- extra info (for future extensions)
+ *       EVENT_ET_END
+ *
+ * Event : 
+ *       Word16         -- event_type
+ *       Word64         -- time (nanosecs)
+ *       [Word16]       -- length of the rest (for variable-sized events only)
+ *       ... extra event-specific info ...
+ *
+ *
+ * To add a new event
+ * ------------------
+ *
+ *  - In this file:
+ *    - give it a new number, add a new #define EVENT_XXX below
+ *  - In EventLog.c
+ *    - add it to the EventDesc array
+ *    - emit the event type in initEventLogging()
+ *    - emit the new event in postEvent_()
+ *    - generate the event itself by calling postEvent() somewhere
+ *  - In the Haskell code to parse the event log file:
+ *    - add types and code to read the new event
+ *
+ * -------------------------------------------------------------------------- */
+
+#ifndef RTS_EVENTLOGFORMAT_H
+#define RTS_EVENTLOGFORMAT_H
+
+/*
+ * Markers for begin/end of the Header.
+ */
+#define EVENT_HEADER_BEGIN    0x68647262 /* 'h' 'd' 'r' 'b' */
+#define EVENT_HEADER_END      0x68647265 /* 'h' 'd' 'r' 'e' */
+
+#define EVENT_DATA_BEGIN      0x64617462 /* 'd' 'a' 't' 'b' */
+#define EVENT_DATA_END        0xffff
+
+/*
+ * Markers for begin/end of the list of Event Types in the Header.
+ * Header, Event Type, Begin = hetb
+ * Header, Event Type, End = hete
+ */
+#define EVENT_HET_BEGIN       0x68657462 /* 'h' 'e' 't' 'b' */
+#define EVENT_HET_END         0x68657465 /* 'h' 'e' 't' 'e' */
+
+#define EVENT_ET_BEGIN        0x65746200 /* 'e' 't' 'b' 0 */
+#define EVENT_ET_END          0x65746500 /* 'e' 't' 'e' 0 */
+
+/*
+ * Types of event
+ */
+#define EVENT_CREATE_THREAD        0 /* (thread)               */
+#define EVENT_RUN_THREAD           1 /* (thread)               */
+#define EVENT_STOP_THREAD          2 /* (thread, status, blockinfo) */
+#define EVENT_THREAD_RUNNABLE      3 /* (thread)               */
+#define EVENT_MIGRATE_THREAD       4 /* (thread, new_cap)      */
+/* 5, 6, 7 deprecated */
+#define EVENT_THREAD_WAKEUP        8 /* (thread, other_cap)    */
+#define EVENT_GC_START             9 /* ()                     */
+#define EVENT_GC_END              10 /* ()                     */
+#define EVENT_REQUEST_SEQ_GC      11 /* ()                     */
+#define EVENT_REQUEST_PAR_GC      12 /* ()                     */
+/* 13, 14 deprecated */
+#define EVENT_CREATE_SPARK_THREAD 15 /* (spark_thread)         */
+#define EVENT_LOG_MSG             16 /* (message ...)          */
+/* EVENT_STARTUP should be deprecated at some point */
+#define EVENT_STARTUP             17 /* (num_capabilities)     */
+#define EVENT_BLOCK_MARKER        18 /* (size, end_time, capability) */
+#define EVENT_USER_MSG            19 /* (message ...)          */
+#define EVENT_GC_IDLE             20 /* () */
+#define EVENT_GC_WORK             21 /* () */
+#define EVENT_GC_DONE             22 /* () */
+/* 23, 24 used by eden */
+#define EVENT_CAPSET_CREATE       25 /* (capset, capset_type)  */
+#define EVENT_CAPSET_DELETE       26 /* (capset)               */
+#define EVENT_CAPSET_ASSIGN_CAP   27 /* (capset, cap)          */
+#define EVENT_CAPSET_REMOVE_CAP   28 /* (capset, cap)          */
+/* the RTS identifier is in the form of "GHC-version rts_way"  */
+#define EVENT_RTS_IDENTIFIER      29 /* (capset, name_version_string) */
+/* the vectors in these events are null separated strings             */
+#define EVENT_PROGRAM_ARGS        30 /* (capset, commandline_vector)  */
+#define EVENT_PROGRAM_ENV         31 /* (capset, environment_vector)  */
+#define EVENT_OSPROCESS_PID       32 /* (capset, pid)          */
+#define EVENT_OSPROCESS_PPID      33 /* (capset, parent_pid)   */
+#define EVENT_SPARK_COUNTERS      34 /* (crt,dud,ovf,cnv,gcd,fiz,rem) */
+#define EVENT_SPARK_CREATE        35 /* ()                     */
+#define EVENT_SPARK_DUD           36 /* ()                     */
+#define EVENT_SPARK_OVERFLOW      37 /* ()                     */
+#define EVENT_SPARK_RUN           38 /* ()                     */
+#define EVENT_SPARK_STEAL         39 /* (victim_cap)           */
+#define EVENT_SPARK_FIZZLE        40 /* ()                     */
+#define EVENT_SPARK_GC            41 /* ()                     */
+#define EVENT_INTERN_STRING       42 /* (string, id) {not used by ghc} */
+#define EVENT_WALL_CLOCK_TIME     43 /* (capset, unix_epoch_seconds, nanoseconds) */
+#define EVENT_THREAD_LABEL        44 /* (thread, name_string)  */
+#define EVENT_CAP_CREATE          45 /* (cap)                  */
+#define EVENT_CAP_DELETE          46 /* (cap)                  */
+#define EVENT_CAP_DISABLE         47 /* (cap)                  */
+#define EVENT_CAP_ENABLE          48 /* (cap)                  */
+#define EVENT_HEAP_ALLOCATED      49 /* (heap_capset, alloc_bytes) */
+#define EVENT_HEAP_SIZE           50 /* (heap_capset, size_bytes) */
+#define EVENT_HEAP_LIVE           51 /* (heap_capset, live_bytes) */
+#define EVENT_HEAP_INFO_GHC       52 /* (heap_capset, n_generations,
+                                         max_heap_size, alloc_area_size,
+                                         mblock_size, block_size) */
+#define EVENT_GC_STATS_GHC        53 /* (heap_capset, generation,
+                                         copied_bytes, slop_bytes, frag_bytes,
+                                         par_n_threads,
+                                         par_max_copied, par_tot_copied) */
+#define EVENT_GC_GLOBAL_SYNC      54 /* ()                     */
+#define EVENT_TASK_CREATE         55 /* (taskID, cap, tid)       */
+#define EVENT_TASK_MIGRATE        56 /* (taskID, cap, new_cap)   */
+#define EVENT_TASK_DELETE         57 /* (taskID)                 */
+#define EVENT_USER_MARKER         58 /* (marker_name) */
+#define EVENT_HACK_BUG_T9003      59 /* Hack: see trac #9003 */
+
+/* Range 59 - 59 is available for new GHC and common events. */
+
+/* Range 60 - 80 is used by eden for parallel tracing
+ * see http://www.mathematik.uni-marburg.de/~eden/
+ */
+
+/* these are used by eden but are replaced by new alternatives for ghc */
+#define EVENT_VERSION                   23 /* (version_string) */
+#define EVENT_PROGRAM_INVOCATION        24 /* (commandline_string) */
+
+/* start of parallel trace events */
+#define EVENT_EDEN_START_RECEIVE         60 /* () */
+#define EVENT_EDEN_END_RECEIVE           61 /* () */
+#define EVENT_CREATE_PROCESS             62 /* (process) */
+#define EVENT_KILL_PROCESS               63 /* (process) */
+#define EVENT_ASSIGN_THREAD_TO_PROCESS   64 /* (thread, process) */
+#define EVENT_CREATE_MACHINE             65 /* (machine, startupTime(in 10^-8 seconds after 19xx)) */
+#define EVENT_KILL_MACHINE               66 /* (machine) */
+#define EVENT_SEND_MESSAGE               67 /* (tag, sender_process, sender_thread, receiver_machine, receiver_process, receiver_inport) */
+#define EVENT_RECEIVE_MESSAGE            68 /* (tag, receiver_process, receiver_inport, sender_machine, sender_process, sender_outport, message_size) */
+#define EVENT_SEND_RECEIVE_LOCAL_MESSAGE 69 /* (tag, sender_process, sender_thread, receiver_process, receiver_inport) */
+
+
+/* Range 100 - 139 is reserved for Mercury, see below. */
+
+/* Range 140 - 159 is reserved for Perf events, see below. */
+
+/*
+ * The highest event code +1 that ghc itself emits. Note that some event
+ * ranges higher than this are reserved but not currently emitted by ghc.
+ * This must match the size of the EventDesc[] array in EventLog.c
+ */
+#define NUM_GHC_EVENT_TAGS        70
+
+
+/* DEPRECATED EVENTS: */
+/* These two are deprecated because we don't need to record the thread, it's
+   implicit. We have to keep these #defines because for tiresome reasons we
+   still need to parse them, see GHC.RTS.Events.ghc6Parsers for details. */
+#define EVENT_RUN_SPARK            5 /* (thread)               */
+#define EVENT_STEAL_SPARK          6 /* (thread, victim_cap)   */
+/* shutdown replaced by EVENT_CAP_DELETE */
+#define EVENT_SHUTDOWN             7 /* ()                     */
+#if 0
+/* ghc changed how it handles sparks so these are no longer applicable */
+#define EVENT_CREATE_SPARK        13 /* (cap, thread) */
+#define EVENT_SPARK_TO_THREAD     14 /* (cap, thread, spark_thread) */
+#endif
+
+
+/*
+ * These event types are Mercury specific, Mercury may use up to event number
+ * 139
+ */
+#define EVENT_FIRST_MER_EVENT       100
+#define NUM_MER_EVENTS               14
+
+#define EVENT_MER_START_PAR_CONJUNCTION 100 /* (dyn id, static id) */
+#define EVENT_MER_STOP_PAR_CONJUNCTION  101 /* (dyn id) */
+#define EVENT_MER_STOP_PAR_CONJUNCT     102 /* (dyn id) */
+#define EVENT_MER_CREATE_SPARK          103 /* (dyn id, spark id) */
+#define EVENT_MER_FUT_CREATE            104 /* (fut id, memo'd name id) */
+#define EVENT_MER_FUT_WAIT_NOSUSPEND    105 /* (fut id) */
+#define EVENT_MER_FUT_WAIT_SUSPENDED    106 /* (fut id) */
+#define EVENT_MER_FUT_SIGNAL            107 /* (fut id) */
+#define EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT \
+                                        108 /* () */
+#define EVENT_MER_WORK_STEALING         109 /* () */
+#define EVENT_MER_LOOKING_FOR_LOCAL_SPARK \
+                                        112 /* () */
+#define EVENT_MER_RELEASE_CONTEXT       110 /* (context id) */
+#define EVENT_MER_ENGINE_SLEEPING       111 /* () */
+#define EVENT_MER_CALLING_MAIN          113 /* () */
+
+
+/*
+ * These event types are parsed from hardware performance counters logs,
+ * such as the Linux Performance Counters data available through
+ * the perf subsystem.
+ */
+
+#define EVENT_PERF_NAME           140 /* (perf_num, name) */
+#define EVENT_PERF_COUNTER        141 /* (perf_num, tid, period) */
+#define EVENT_PERF_TRACEPOINT     142 /* (perf_num, tid) */
+
+
+/*
+ * Status values for EVENT_STOP_THREAD
+ *
+ * 1-5 are the StgRun return values (from includes/rts/Constants.h):
+ *
+ * #define HeapOverflow   1
+ * #define StackOverflow  2
+ * #define ThreadYielding 3
+ * #define ThreadBlocked  4
+ * #define ThreadFinished 5
+ * #define ForeignCall                  6
+ * #define BlockedOnMVar                7
+ * #define BlockedOnMVarRead            20
+ * NOTE: in GHC-7.8.2, this was 8, and following states shifted one up
+ * #define BlockedOnBlackHole           8
+ * #define BlockedOnRead                9
+ * #define BlockedOnWrite               10
+ * #define BlockedOnDelay               11
+ * #define BlockedOnSTM                 12
+ * #define BlockedOnDoProc              13
+ * NOTE: unused GUM states 8, 9 (here: 14,15) in rts/Constants.h
+ * #define BlockedOnCCall               -- not used (see ForeignCall)
+ * #define BlockedOnCCall_NoUnblockExc  -- not used (see ForeignCall)
+ * #define BlockedOnMsgThrowTo          16
+ * NOTE: 16 because unused GUM states ignored in ghc-events lib
+ *       Otherwise it would be 18, following would be 19, 20
+ * TODO: verify the above is what GHC does (16/17 could be 18/19) 
+ * #define ThreadMigrating              17
+ * #define BlockedOnMsgGlobalise        18 
+ * NOTE: not present in GHC. Mercury-Event?
+ */
+#define THREAD_SUSPENDED_FOREIGN_CALL 6
+
+/*
+ * Capset type values for EVENT_CAPSET_CREATE
+ */
+#define CAPSET_TYPE_CUSTOM      1  /* reserved for end-user applications */
+#define CAPSET_TYPE_OSPROCESS   2  /* caps belong to the same OS process */
+#define CAPSET_TYPE_CLOCKDOMAIN 3  /* caps share a local clock/time      */
+
+#ifndef EVENTLOG_CONSTANTS_ONLY
+
+typedef StgWord16 EventTypeNum;
+typedef StgWord64 EventTimestamp; /* in nanoseconds */
+typedef StgWord32 EventThreadID;
+typedef StgWord16 EventCapNo;
+typedef StgWord16 EventPayloadSize; /* variable-size events */
+typedef StgWord16 EventThreadStatus; /* status for EVENT_STOP_THREAD */
+typedef StgWord32 EventCapsetID;
+typedef StgWord16 EventCapsetType;   /* types for EVENT_CAPSET_CREATE */
+typedef StgWord64 EventTaskId;         /* for EVENT_TASK_* */
+typedef StgWord64 EventKernelThreadId; /* for EVENT_TASK_CREATE */
+
+typedef StgWord32 EventProcessID;
+typedef StgWord16 EventMachineID;
+typedef EventThreadID EventPortID;
+
+#endif
+
+#endif /* RTS_EVENTLOGFORMAT_H */
diff --git a/src/GHC/RTS/EventParserUtils.hs b/src/GHC/RTS/EventParserUtils.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/EventParserUtils.hs
@@ -0,0 +1,181 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE FlexibleContexts #-}
+module GHC.RTS.EventParserUtils (
+        EventParser(..),
+        EventParsers(..),
+
+        getString,
+        mkEventTypeParsers,
+        simpleEvent,
+        skip,
+    ) where
+
+import Control.Monad
+import Data.Array
+import Data.Binary
+import Data.Binary.Get ()
+import qualified Data.Binary.Get as G
+import Data.Binary.Put ()
+import Data.Char
+import Data.IntMap (IntMap)
+import qualified Data.IntMap as M
+import Data.List
+
+#define EVENTLOG_CONSTANTS_ONLY
+#include "EventLogFormat.h"
+
+import GHC.RTS.EventTypes
+
+newtype EventParsers = EventParsers (Array Int (Get EventInfo))
+
+nBytes :: Integral a => a -> Get [Word8]
+nBytes n = replicateM (fromIntegral n) get
+
+getString :: Integral a => a -> Get String
+getString len = do
+    bytes <- nBytes len
+    return $ map (chr . fromIntegral) bytes
+
+skip :: Integral a => a -> Get ()
+skip n = G.skip (fromIntegral n)
+
+--
+-- Code to build the event parser table.
+--
+
+--
+-- | Event parser data. Parsers are either fixed or vairable size.
+--
+data EventParser a
+    = FixedSizeParser {
+        fsp_type        :: Int,
+        fsp_size        :: EventTypeSize,
+        fsp_parser      :: Get a
+    }
+    | VariableSizeParser {
+        vsp_type        :: Int,
+        vsp_parser      :: Get a
+    }
+
+getParser :: EventParser a -> Get a
+getParser (FixedSizeParser _ _ p) = p
+getParser (VariableSizeParser _ p) = p
+
+getType :: EventParser a -> Int
+getType (FixedSizeParser t _ _) = t
+getType (VariableSizeParser t _) = t
+
+isFixedSize :: EventParser a -> Bool
+isFixedSize (FixedSizeParser {}) = True
+isFixedSize (VariableSizeParser {}) = False
+
+simpleEvent :: Int -> a -> EventParser a
+simpleEvent t p = FixedSizeParser t 0 (return p)
+
+-- Our event log format allows new fields to be added to events over
+-- time.  This means that our parser must be able to handle:
+--
+--  * old versions of an event, with fewer fields than expected,
+--  * new versions of an event, with more fields than expected
+--
+-- The event log file declares the size for each event type, so we can
+-- select the correct parser for the event type based on its size.  We
+-- do this once after parsing the header: given the EventTypes, we build
+-- an array of event parsers indexed by event type.
+--
+-- For each event type, we may have multiple parsers for different
+-- versions of the event, indexed by size.  These are listed in the
+-- eventTypeParsers list below.  For the given log file we select the
+-- parser for the most recent version (largest size less than the size
+-- declared in the header).  If this is a newer version of the event
+-- than we understand, there may be extra bytes that we have to read
+-- and discard in the parser for this event type.
+--
+-- Summary:
+--   if size is smaller that we expect:
+--     parse the earier version, or ignore the event
+--   if size is just right:
+--     parse it
+--   if size is too big:
+--     parse the bits we understand and discard the rest
+
+mkEventTypeParsers :: IntMap EventType
+                   -> [EventParser EventInfo]
+                   -> Array Int (Get EventInfo)
+mkEventTypeParsers etypes event_parsers
+ = accumArray (flip const) undefined (0, max_event_num)
+    [ (num, parser num) | num <- [0..max_event_num] ]
+  where
+    max_event_num = maximum (M.keys etypes)
+    undeclared_etype num = fail ("undeclared event type: " ++ show num)
+    parser_map = makeParserMap event_parsers
+    parser num =
+            -- Get the event's size from the header,
+            -- the first Maybe describes whether the event was declared in the header.
+            -- the second Maybe selects between variable and fixed size events.
+        let mb_mb_et_size = do et <- M.lookup num etypes
+                               return $ size et
+            -- Find a parser for the event with the given size.
+            maybe_parser mb_et_size = do possible <- M.lookup num parser_map
+                                         best_parser <- case mb_et_size of
+                                            Nothing -> getVariableParser possible
+                                            Just et_size -> getFixedParser et_size possible
+                                         return $ getParser best_parser
+            in case mb_mb_et_size of
+                -- This event is declared in the log file's header
+                Just mb_et_size -> case maybe_parser mb_et_size of
+                    -- And we have a valid parser for it.
+                    Just p -> p
+                    -- But we don't have a valid parser for it.
+                    Nothing -> noEventTypeParser num mb_et_size
+                -- This event is not declared in the log file's header
+                Nothing -> undeclared_etype num
+
+-- Find the first variable length parser.
+getVariableParser :: [EventParser a] -> Maybe (EventParser a)
+getVariableParser [] = Nothing
+getVariableParser (x:xs) = case x of
+    FixedSizeParser _ _ _ -> getVariableParser xs
+    VariableSizeParser _ _ -> Just x
+
+-- Find the best fixed size parser, that is to say, the parser for the largest
+-- event that does not exceed the size of the event as declared in the log
+-- file's header.
+getFixedParser :: EventTypeSize -> [EventParser a] -> Maybe (EventParser a)
+getFixedParser size parsers =
+        do parser <- ((filter isFixedSize) `pipe`
+                      (filter (\x -> (fsp_size x) <= size)) `pipe`
+                      (sortBy descending_size) `pipe`
+                      maybe_head) parsers
+           return $ padParser size parser
+    where pipe f g = g . f
+          descending_size (FixedSizeParser _ s1 _) (FixedSizeParser _ s2 _) =
+            compare s2 s1
+          descending_size _ _ = undefined
+          maybe_head [] = Nothing
+          maybe_head (x:_) = Just x
+
+padParser :: EventTypeSize -> (EventParser a) -> (EventParser a)
+padParser _    (VariableSizeParser t p) = VariableSizeParser t p
+padParser size (FixedSizeParser t orig_size orig_p) = FixedSizeParser t size p
+    where p = if (size == orig_size)
+                then orig_p
+                else do d <- orig_p
+                        skip (size - orig_size)
+                        return d
+
+makeParserMap :: [EventParser a] -> IntMap [EventParser a]
+makeParserMap = foldl buildParserMap M.empty
+    where buildParserMap map' parser =
+              M.alter (addParser parser) (getType parser) map'
+          addParser p Nothing = Just [p]
+          addParser p (Just ps) = Just (p:ps)
+
+noEventTypeParser :: Int -> Maybe EventTypeSize
+                  -> Get EventInfo
+noEventTypeParser num mb_size = do
+  bytes <- case mb_size of
+             Just n  -> return n
+             Nothing -> get :: Get Word16
+  skip bytes
+  return UnknownEvent{ ref = fromIntegral num }
diff --git a/src/GHC/RTS/EventTypes.hs b/src/GHC/RTS/EventTypes.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/EventTypes.hs
@@ -0,0 +1,528 @@
+module GHC.RTS.EventTypes where
+import Control.Monad
+
+import Data.Binary
+
+-- EventType.
+type EventTypeNum = Word16
+type EventTypeDescLen = Word32
+type EventTypeDesc = String
+type EventTypeSize = Word16
+-- Event.
+type EventDescription = String
+type Timestamp = Word64
+type ThreadId = Word32
+type CapNo = Word16
+type Marker = Word32
+type BlockSize = Word32
+type RawThreadStopStatus = Word16
+type StringId = Word32
+type Capset   = Word32
+type PerfEventTypeNum = Word32
+type TaskId = Word64
+type PID = Word32
+
+newtype KernelThreadId = KernelThreadId { kernelThreadId :: Word64 }
+  deriving (Eq, Ord, Show)
+instance Binary KernelThreadId where
+  put (KernelThreadId tid) = put tid
+  get = fmap KernelThreadId get
+
+-- Types for Parallel-RTS Extension
+type ProcessId = Word32
+type MachineId = Word16
+type PortId = ThreadId
+type MessageSize = Word32
+type RawMsgTag = Word8
+
+-- These types are used by Mercury events.
+type ParConjDynId = Word64
+type ParConjStaticId = StringId
+type SparkId = Word32
+type FutureId = Word64
+
+sz_event_type_num :: EventTypeSize
+sz_event_type_num = 2
+sz_cap :: EventTypeSize
+sz_cap  = 2
+sz_time :: EventTypeSize
+sz_time = 8
+sz_tid :: EventTypeSize
+sz_tid  = 4
+sz_old_tid :: EventTypeSize
+sz_old_tid  = 8 -- GHC 6.12 was using 8 for ThreadID when declaring the size
+                -- of events, but was actually using 32 bits for ThreadIDs
+sz_capset :: EventTypeSize
+sz_capset = 4
+sz_capset_type :: EventTypeSize
+sz_capset_type = 2
+sz_block_size :: EventTypeSize
+sz_block_size = 4
+sz_block_event :: EventTypeSize
+sz_block_event = fromIntegral (sz_event_type_num + sz_time + sz_block_size
+    + sz_time + sz_cap)
+sz_pid :: EventTypeSize
+sz_pid = 4
+sz_taskid :: EventTypeSize
+sz_taskid = 8
+sz_kernel_tid :: EventTypeSize
+sz_kernel_tid = 8
+sz_th_stop_status :: EventTypeSize
+sz_th_stop_status = 2
+sz_string_id :: EventTypeSize
+sz_string_id = 4
+sz_perf_num :: EventTypeSize
+sz_perf_num = 4
+
+-- Sizes for Parallel-RTS event fields
+sz_procid, sz_mid, sz_mes, sz_realtime, sz_msgtag :: EventTypeSize
+sz_procid  = 4
+sz_mid  = 2
+sz_mes  = 4
+sz_realtime = 8
+sz_msgtag  = 1
+
+-- Sizes for Mercury event fields.
+sz_par_conj_dyn_id :: EventTypeSize
+sz_par_conj_dyn_id = 8
+sz_par_conj_static_id :: EventTypeSize
+sz_par_conj_static_id = sz_string_id
+sz_spark_id :: EventTypeSize
+sz_spark_id = 4
+sz_future_id :: EventTypeSize
+sz_future_id = 8
+
+{-
+ - Data type delcarations to build the GHC RTS data format,
+ - which is a (header, data) pair.
+ -
+ - Header contains EventTypes.
+ - Data contains Events.
+ -}
+data EventLog =
+  EventLog {
+    header :: Header,
+    dat    :: Data
+  } deriving Show
+
+newtype Header = Header {
+     eventTypes :: [EventType]
+  } deriving (Show, Eq)
+
+data Data = Data {
+     events :: [Event]
+  } deriving Show
+
+data EventType =
+  EventType {
+    num  :: EventTypeNum,
+    desc :: EventTypeDesc,
+    size :: Maybe EventTypeSize -- ^ 'Nothing' indicates variable size
+  } deriving (Show, Eq)
+
+data Event =
+  Event {
+    evTime  :: {-# UNPACK #-}!Timestamp,
+    evSpec  :: EventInfo,
+    evCap :: Maybe Int
+  } deriving Show
+
+{-# DEPRECATED time "The field is now called evTime" #-}
+time :: Event -> Timestamp
+time = evTime
+
+{-# DEPRECATED spec "The field is now called evSpec" #-}
+spec :: Event -> EventInfo
+spec = evSpec
+
+data EventInfo
+
+  -- pseudo events
+  = EventBlock         { end_time   :: Timestamp,
+                         cap        :: Int,
+                         block_size :: BlockSize
+                       }
+  | UnknownEvent       { ref  :: {-# UNPACK #-}!EventTypeNum }
+
+  -- init and shutdown
+  | Startup            { n_caps :: Int
+                       }
+  -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6+
+  -- no longer generate the event; should be removed at some point
+  | Shutdown           { }
+
+  -- thread scheduling
+  | CreateThread       { thread :: {-# UNPACK #-}!ThreadId
+                       }
+  | RunThread          { thread :: {-# UNPACK #-}!ThreadId
+                       }
+  | StopThread         { thread :: {-# UNPACK #-}!ThreadId,
+                         status :: !ThreadStopStatus
+                       }
+  | ThreadRunnable     { thread :: {-# UNPACK #-}!ThreadId
+                       }
+  | MigrateThread      { thread :: {-# UNPACK #-}!ThreadId,
+                         newCap :: {-# UNPACK #-}!Int
+                       }
+  | WakeupThread       { thread :: {-# UNPACK #-}!ThreadId,
+                         otherCap :: {-# UNPACK #-}!Int
+                       }
+  | ThreadLabel        { thread :: {-# UNPACK #-}!ThreadId,
+                         threadlabel :: String
+                       }
+
+  -- par sparks
+  | CreateSparkThread  { sparkThread :: {-# UNPACK #-}!ThreadId
+                       }
+  | SparkCounters      { sparksCreated, sparksDud, sparksOverflowed,
+                         sparksConverted, sparksFizzled, sparksGCd,
+                         sparksRemaining :: {-# UNPACK #-}! Word64
+                       }
+  | SparkCreate        { }
+  | SparkDud           { }
+  | SparkOverflow      { }
+  | SparkRun           { }
+  | SparkSteal         { victimCap :: {-# UNPACK #-}!Int }
+  | SparkFizzle        { }
+  | SparkGC            { }
+
+  -- tasks
+  | TaskCreate         { taskId :: TaskId,
+                         cap :: {-# UNPACK #-}!Int,
+                         tid :: {-# UNPACK #-}!KernelThreadId
+                       }
+  | TaskMigrate        { taskId :: TaskId,
+                         cap :: {-# UNPACK #-}!Int,
+                         new_cap :: {-# UNPACK #-}!Int
+                       }
+  | TaskDelete         { taskId :: TaskId }
+
+  -- garbage collection
+  | RequestSeqGC       { }
+  | RequestParGC       { }
+  | StartGC            { }
+  | GCWork             { }
+  | GCIdle             { }
+  | GCDone             { }
+  | EndGC              { }
+  | GlobalSyncGC       { }
+  | GCStatsGHC         { heapCapset   :: {-# UNPACK #-}!Capset
+                       , gen          :: {-# UNPACK #-}!Int
+                       , copied       :: {-# UNPACK #-}!Word64
+                       , slop, frag   :: {-# UNPACK #-}!Word64
+                       , parNThreads  :: {-# UNPACK #-}!Int
+                       , parMaxCopied :: {-# UNPACK #-}!Word64
+                       , parTotCopied :: {-# UNPACK #-}!Word64
+                       }
+
+  -- heap statistics
+  | HeapAllocated      { heapCapset  :: {-# UNPACK #-}!Capset
+                       , allocBytes  :: {-# UNPACK #-}!Word64
+                       }
+  | HeapSize           { heapCapset  :: {-# UNPACK #-}!Capset
+                       , sizeBytes   :: {-# UNPACK #-}!Word64
+                       }
+  | HeapLive           { heapCapset  :: {-# UNPACK #-}!Capset
+                       , liveBytes   :: {-# UNPACK #-}!Word64
+                       }
+  | HeapInfoGHC        { heapCapset    :: {-# UNPACK #-}!Capset
+                       , gens          :: {-# UNPACK #-}!Int
+                       , maxHeapSize   :: {-# UNPACK #-}!Word64
+                       , allocAreaSize :: {-# UNPACK #-}!Word64
+                       , mblockSize    :: {-# UNPACK #-}!Word64
+                       , blockSize     :: {-# UNPACK #-}!Word64
+                       }
+
+  -- adjusting the number of capabilities on the fly
+  | CapCreate          { cap :: {-# UNPACK #-}!Int
+                       }
+  | CapDelete          { cap :: {-# UNPACK #-}!Int
+                       }
+  | CapDisable         { cap :: {-# UNPACK #-}!Int
+                       }
+  | CapEnable          { cap :: {-# UNPACK #-}!Int
+                       }
+
+  -- capability sets
+  | CapsetCreate       { capset     :: {-# UNPACK #-}!Capset
+                       , capsetType :: CapsetType
+                       }
+  | CapsetDelete       { capset :: {-# UNPACK #-}!Capset
+                       }
+  | CapsetAssignCap    { capset :: {-# UNPACK #-}!Capset
+                       , cap    :: {-# UNPACK #-}!Int
+                       }
+  | CapsetRemoveCap    { capset :: {-# UNPACK #-}!Capset
+                       , cap    :: {-# UNPACK #-}!Int
+                       }
+
+  -- program/process info
+  | RtsIdentifier      { capset :: {-# UNPACK #-}!Capset
+                       , rtsident :: String
+                       }
+  | ProgramArgs        { capset :: {-# UNPACK #-}!Capset
+                       , args   :: [String]
+                       }
+  | ProgramEnv         { capset :: {-# UNPACK #-}!Capset
+                       , env    :: [String]
+                       }
+  | OsProcessPid       { capset :: {-# UNPACK #-}!Capset
+                       , pid    :: {-# UNPACK #-}!PID
+                       }
+  | OsProcessParentPid { capset :: {-# UNPACK #-}!Capset
+                       , ppid   :: {-# UNPACK #-}!PID
+                       }
+  | WallClockTime      { capset :: {-# UNPACK #-}!Capset
+                       , sec    :: {-# UNPACK #-}!Word64
+                       , nsec   :: {-# UNPACK #-}!Word32
+                       }
+
+  -- messages
+  | Message            { msg :: String }
+  | UserMessage        { msg :: String }
+  | UserMarker         { markername :: String }
+
+  -- Events emitted by a parallel RTS
+   -- Program /process info (tools might prefer newer variants above)
+  | Version            { version :: String }
+  | ProgramInvocation  { commandline :: String }
+   -- startup and shutdown (incl. real start time, not first log entry)
+  | CreateMachine      { machine :: {-# UNPACK #-} !MachineId,
+                         realtime    :: {-# UNPACK #-} !Timestamp}
+  | KillMachine        { machine ::  {-# UNPACK #-} !MachineId }
+   -- Haskell processes mgmt (thread groups that share heap and communicate)
+  | CreateProcess      { process :: {-# UNPACK #-} !ProcessId }
+  | KillProcess        { process :: {-# UNPACK #-} !ProcessId }
+  | AssignThreadToProcess { thread :: {-# UNPACK #-} !ThreadId,
+                            process :: {-# UNPACK #-} !ProcessId
+                          }
+   -- communication between processes
+  | EdenStartReceive   { }
+  | EdenEndReceive     { }
+  | SendMessage        { mesTag :: !MessageTag,
+                         senderProcess :: {-# UNPACK #-} !ProcessId,
+                         senderThread :: {-# UNPACK #-} !ThreadId,
+                         receiverMachine ::  {-# UNPACK #-} !MachineId,
+                         receiverProcess :: {-# UNPACK #-} !ProcessId,
+                         receiverInport :: {-# UNPACK #-} !PortId
+                       }
+  | ReceiveMessage     { mesTag :: !MessageTag,
+                         receiverProcess :: {-# UNPACK #-} !ProcessId,
+                         receiverInport :: {-# UNPACK #-} !PortId,
+                         senderMachine ::  {-# UNPACK #-} !MachineId,
+                         senderProcess :: {-# UNPACK #-} !ProcessId,
+                         senderThread :: {-# UNPACK #-} !ThreadId,
+                         messageSize :: {-# UNPACK #-} !MessageSize
+                       }
+  | SendReceiveLocalMessage { mesTag :: !MessageTag,
+                              senderProcess :: {-# UNPACK #-} !ProcessId,
+                              senderThread :: {-# UNPACK #-} !ThreadId,
+                              receiverProcess :: {-# UNPACK #-} !ProcessId,
+                              receiverInport :: {-# UNPACK #-} !PortId
+                            }
+
+  -- These events have been added for Mercury's benifit but are generally
+  -- useful.
+  | InternString       { str :: String, sId :: {-# UNPACK #-}!StringId }
+
+  -- Mercury specific events.
+  | MerStartParConjunction {
+        dyn_id      :: {-# UNPACK #-}!ParConjDynId,
+        static_id   :: {-# UNPACK #-}!ParConjStaticId
+    }
+  | MerEndParConjunction {
+        dyn_id      :: {-# UNPACK #-}!ParConjDynId
+    }
+  | MerEndParConjunct {
+        dyn_id      :: {-# UNPACK #-}!ParConjDynId
+    }
+  | MerCreateSpark {
+        dyn_id      :: {-# UNPACK #-}!ParConjDynId,
+        spark_id    :: {-# UNPACK #-}!SparkId
+    }
+  | MerFutureCreate {
+        future_id   :: {-# UNPACK #-}!FutureId,
+        name_id     :: {-# UNPACK #-}!StringId
+    }
+  | MerFutureWaitNosuspend {
+        future_id   :: {-# UNPACK #-}!FutureId
+    }
+  | MerFutureWaitSuspended {
+        future_id   :: {-# UNPACK #-}!FutureId
+    }
+  | MerFutureSignal {
+        future_id   :: {-# UNPACK #-}!FutureId
+    }
+  | MerLookingForGlobalThread
+  | MerWorkStealing
+  | MerLookingForLocalSpark
+  | MerReleaseThread {
+        thread_id   :: {-# UNPACK #-}!ThreadId
+    }
+  | MerCapSleeping
+  | MerCallingMain
+
+  -- perf events
+  | PerfName           { perfNum :: {-# UNPACK #-}!PerfEventTypeNum
+                       , name    :: String
+                       }
+  | PerfCounter        { perfNum :: {-# UNPACK #-}!PerfEventTypeNum
+                       , tid     :: {-# UNPACK #-}!KernelThreadId
+                       , period  :: {-# UNPACK #-}!Word64
+                       }
+  | PerfTracepoint     { perfNum :: {-# UNPACK #-}!PerfEventTypeNum
+                       , tid     :: {-# UNPACK #-}!KernelThreadId
+                       }
+
+  deriving Show
+
+{- [Note: Stop status in GHC-7.8.2]
+
+In GHC-7.7, a new thread block reason "BlockedOnMVarRead" was
+introduced, and placed adjacent to BlockedOnMVar (7). Therefore, event
+logs produced by GHC pre-7.8.2 encode BlockedOnBlackHole and following
+as 8..18, whereas GHC-7.8.2 event logs encode them as 9..19.
+Later, the prior event numbering was restored for GHC-7.8.3.
+See GHC bug #9003 for a discussion.
+
+The parsers in Events.hs have to be adapted accordingly, providing
+special ghc-7.8.2 parsers for the thread-stop event if GHC-7.8.2
+produced the eventlog.
+The EVENT_USER_MARKER was not present in GHC-7.6.3, and a new event
+EVENT_HACK_BUG_T9003 was added in GHC-7.8.3, so we take presence of
+USER_MARKER and absence of HACK_BUG_T9003 as an indication that
+ghc-7.8.2 parsers should be used.
+-}
+
+--sync with ghc/includes/Constants.h
+data ThreadStopStatus
+ = NoStatus
+ | HeapOverflow
+ | StackOverflow
+ | ThreadYielding
+ | ThreadBlocked
+ | ThreadFinished
+ | ForeignCall
+ | BlockedOnMVar
+ | BlockedOnMVarRead   -- since GHC-7.8, see [Stop status since GHC-7.7]
+ | BlockedOnBlackHole
+ | BlockedOnRead
+ | BlockedOnWrite
+ | BlockedOnDelay
+ | BlockedOnSTM
+ | BlockedOnDoProc
+ | BlockedOnCCall
+ | BlockedOnCCall_NoUnblockExc
+ | BlockedOnMsgThrowTo
+ | ThreadMigrating
+ | BlockedOnMsgGlobalise
+ | BlockedOnBlackHoleOwnedBy {-# UNPACK #-}!ThreadId
+ deriving (Show)
+
+-- normal GHC encoding, see [Stop status in GHC-7.8.2]
+mkStopStatus :: RawThreadStopStatus -> ThreadStopStatus
+mkStopStatus n = case n of
+ 0  ->  NoStatus
+ 1  ->  HeapOverflow
+ 2  ->  StackOverflow
+ 3  ->  ThreadYielding
+ 4  ->  ThreadBlocked
+ 5  ->  ThreadFinished
+ 6  ->  ForeignCall
+ 7  ->  BlockedOnMVar
+ 8  ->  BlockedOnBlackHole
+ 9  ->  BlockedOnRead
+ 10 ->  BlockedOnWrite
+ 11 ->  BlockedOnDelay
+ 12 ->  BlockedOnSTM
+ 13 ->  BlockedOnDoProc
+ 14 ->  BlockedOnCCall
+ 15 ->  BlockedOnCCall_NoUnblockExc
+ 16 ->  BlockedOnMsgThrowTo
+ 17 ->  ThreadMigrating
+ 18 ->  BlockedOnMsgGlobalise
+ 19 ->  NoStatus -- yeuch... this one does not actually exist in GHC eventlogs
+ 20 ->  BlockedOnMVarRead -- since GHC-7.8.3
+ _  ->  error "mkStat"
+
+-- GHC 7.8.2 encoding, see [Stop status in GHC-7.8.2]
+mkStopStatus782 :: RawThreadStopStatus -> ThreadStopStatus
+mkStopStatus782 n = case n of
+ 0  ->  NoStatus
+ 1  ->  HeapOverflow
+ 2  ->  StackOverflow
+ 3  ->  ThreadYielding
+ 4  ->  ThreadBlocked
+ 5  ->  ThreadFinished
+ 6  ->  ForeignCall
+ 7  ->  BlockedOnMVar
+ 8  ->  BlockedOnMVarRead -- in GHC-7.8.2
+ 9  ->  BlockedOnBlackHole
+ 10 ->  BlockedOnRead
+ 11 ->  BlockedOnWrite
+ 12 ->  BlockedOnDelay
+ 13 ->  BlockedOnSTM
+ 14 ->  BlockedOnDoProc
+ 15 ->  BlockedOnCCall
+ 16 ->  BlockedOnCCall_NoUnblockExc
+ 17 ->  BlockedOnMsgThrowTo
+ 18 ->  ThreadMigrating
+ 19 ->  BlockedOnMsgGlobalise
+ _  ->  error "mkStat"
+
+maxThreadStopStatusPre77, maxThreadStopStatus782, maxThreadStopStatus
+    :: RawThreadStopStatus
+maxThreadStopStatusPre77  = 18 -- see [Stop status in GHC-7.8.2]
+maxThreadStopStatus782    = 19 -- need to distinguish three cases
+maxThreadStopStatus = 20
+
+data CapsetType
+ = CapsetCustom
+ | CapsetOsProcess
+ | CapsetClockDomain
+ | CapsetUnknown
+ deriving Show
+
+mkCapsetType :: Word16 -> CapsetType
+mkCapsetType n = case n of
+ 1 -> CapsetCustom
+ 2 -> CapsetOsProcess
+ 3 -> CapsetClockDomain
+ _ -> CapsetUnknown
+
+-- | An event annotated with the Capability that generated it, if any
+{-# DEPRECATED CapEvent "CapEvents will be removed soon, now Event has a field evCap" #-}
+data CapEvent
+  = CapEvent { ce_cap   :: Maybe Int,
+               ce_event :: Event
+               -- we could UNPACK ce_event, but the Event constructor
+               -- might be shared, in which case we could end up
+               -- increasing the space usage.
+             } deriving Show
+
+--sync with ghc/parallel/PEOpCodes.h
+data MessageTag
+  = Ready | NewPE | PETIDS | Finish
+  | FailPE | RFork | Connect | DataMes
+  | Head | Constr | Part | Terminate
+  | Packet
+  -- with GUM and its variants, add:
+  -- ...| Fetch | Resume | Ack
+  -- ...| Fish | Schedule | Free | Reval | Shark
+  deriving (Enum, Show)
+offset :: RawMsgTag
+offset = 0x50
+
+-- decoder and encoder
+toMsgTag :: RawMsgTag -> MessageTag
+toMsgTag = toEnum . fromIntegral . (\n -> n - offset)
+
+fromMsgTag :: MessageTag -> RawMsgTag
+fromMsgTag = (+ offset) . fromIntegral . fromEnum
+
+-- Checks if the capability is not -1 (which indicates a global eventblock), so
+-- has no associated capability
+mkCap :: Int -> Maybe Int
+mkCap cap = do
+  guard $ fromIntegral cap /= (maxBound :: Word16)
+  return cap
diff --git a/src/GHC/RTS/Events.hs b/src/GHC/RTS/Events.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events.hs
@@ -0,0 +1,495 @@
+{-# LANGUAGE CPP,BangPatterns #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE MultiWayIf #-}
+{-# OPTIONS_GHC -fsimpl-tick-factor=150 #-}
+{-
+ -   Parser functions for GHC RTS EventLog framework.
+ -}
+
+module GHC.RTS.Events (
+       -- * The event log types
+       EventLog(..),
+       Header(..),
+       Data(..),
+       EventType(..),
+       Event(..),
+       EventInfo(..),
+       ThreadStopStatus(..),
+       CapsetType(..),
+       Timestamp,
+       ThreadId,
+       TaskId,
+       KernelThreadId(..),
+       EventTypeNum,
+       EventTypeDesc,
+       EventTypeSize,
+       BlockSize,
+       Capset,
+       StringId,
+       -- some types for the parallel RTS
+       ProcessId,
+       MachineId,
+       PortId,
+       MessageSize,
+       MessageTag(..),
+       ParConjDynId,
+       ParConjStaticId,
+       SparkId,
+       FutureId,
+       PerfEventTypeNum,
+
+       -- * Reading and writing event logs
+       readEventLogFromFile,
+       writeEventLogToFile,
+
+       serialiseEventLog,
+
+       -- * Utilities
+       CapEvent(..), sortEvents,
+       buildEventTypeMap,
+
+       -- * Printing
+       printEventsIncremental,
+       showEventInfo, buildEventInfo,
+       showThreadStopStatus,
+       ppEventLog, ppEventType,
+       ppEvent, buildEvent, buildEvent',
+
+       -- * Perf events
+       nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT,
+       sz_perf_num, sz_kernel_tid,
+
+       -- * For compatibility with old clients
+       -- readEventLogFromFile, TODO
+       spec,
+       time,
+  ) where
+
+{- Libraries. -}
+import Control.Applicative
+import Control.Concurrent hiding (ThreadId)
+import qualified Data.Binary.Put as P
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Builder as BB
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString.Lazy.Char8 as BL8
+import Data.IntMap (IntMap)
+import qualified Data.IntMap as IM
+import Data.Foldable (foldMap)
+import Data.Function hiding (id)
+import Data.List
+import Data.Monoid ((<>))
+import System.IO
+import Prelude hiding (gcd, rem, id)
+
+import GHC.RTS.EventTypes
+import GHC.RTS.Events.Binary
+import GHC.RTS.Events.Incremental
+
+-- | Read an entire eventlog file. It returns an error message if it
+-- encouters an error while decoding.
+--
+-- Note that it doesn't fail if it consumes all input in the middle of decoding
+-- of an event.
+readEventLogFromFile :: FilePath -> IO (Either String EventLog)
+readEventLogFromFile path = fmap fst . readEventLog <$> BL.readFile path
+
+-- | Read an eventlog file and pretty print it to stdout
+printEventsIncremental
+  :: Bool -- ^ Follow the file or not
+  -> FilePath
+  -> IO ()
+printEventsIncremental follow path =
+  withFile path ReadMode (hPrintEventsIncremental follow)
+
+-- | Read an eventlog from the Handle and pretty print it to stdout
+hPrintEventsIncremental
+  :: Bool -- ^ Follow the handle or not
+  -> Handle
+  -> IO ()
+hPrintEventsIncremental follow hdl = go decodeEventLog
+  where
+    go decoder = case decoder of
+      Produce event decoder' -> do
+        BB.hPutBuilder stdout $ buildEvent' event <> "\n"
+        go decoder'
+      Consume k -> do
+        chunk <- B.hGetSome hdl 4096
+        if
+          | not (B.null chunk) -> go $ k chunk
+          | follow -> threadDelay 1000000 >> go decoder
+          | otherwise -> return ()
+      Done {} -> return ()
+      Error _ err -> fail err
+
+
+-- | Writes the 'EventLog' to file. The log is expected to __NOT__ have 'EventBlock'
+-- markers/events - the parsers no longer emit them and they are handled behind
+-- the scenes.
+writeEventLogToFile :: FilePath -> EventLog -> IO ()
+writeEventLogToFile fp = BL.writeFile fp . serialiseEventLog
+
+
+-- | Serialises an 'EventLog' back to a 'ByteString', usually for writing it
+-- back to a file.
+serialiseEventLog :: EventLog -> BL.ByteString
+serialiseEventLog el@(EventLog _ (Data events)) =
+  P.runPut $ putEventLog blockedEl
+  where
+    eventsMap = capSplitEvents events
+    blockedEventsMap = IM.mapWithKey addBlockMarker eventsMap
+    blockedEl = el{dat = Data blockedEvents}
+    blockedEvents = IM.foldr (++) [] blockedEventsMap
+
+-- Gets the Capability of an event in numeric form
+getIntCap :: Event -> Int
+getIntCap Event{evCap = cap} =
+  case cap of
+  Just capNo -> capNo
+  Nothing    -> -1
+
+-- Creates an IntMap of the events with capability number as the key.
+-- Key -1 indicates global (capless) event
+capSplitEvents :: [Event] -> IM.IntMap [Event]
+capSplitEvents evts = capSplitEvents' evts IM.empty
+
+capSplitEvents' :: [Event] -> IM.IntMap [Event] -> IM.IntMap [Event]
+capSplitEvents' evts imap =
+  case evts of
+  (x:xs) -> capSplitEvents' xs (IM.insertWith (++) (getIntCap x) [x] imap)
+  []     -> imap
+
+-- Adds a block marker to the beginnng of a list of events, annotated with
+-- its capability. All events are expected to belong to the same cap.
+addBlockMarker :: Int -> [Event] -> [Event]
+addBlockMarker cap evts =
+  (Event startTime (EventBlock endTime cap sz) (mkCap cap)) : sortedEvts
+  where
+    sz = fromIntegral . BL.length $ P.runPut $ mapM_ putEvent evts
+    startTime = case sortedEvts of
+      (x:_) -> evTime x
+      [] -> error "Cannot add block marker to an empty list of events"
+    sortedEvts = sortEvents evts
+    endTime = evTime $ last sortedEvts
+
+-- -----------------------------------------------------------------------------
+-- Utilities
+sortEvents :: [Event] -> [Event]
+sortEvents = sortBy (compare `on` evTime)
+
+buildEventTypeMap :: [EventType] -> IntMap EventType
+buildEventTypeMap etypes =
+  IM.fromList [ (fromIntegral (num t),t) | t <- etypes ]
+
+-----------------------------------------------------------------------------
+-- Some pretty-printing support
+
+showEventInfo :: EventInfo -> String
+showEventInfo = BL8.unpack . BB.toLazyByteString . buildEventInfo
+
+buildEventInfo :: EventInfo -> BB.Builder
+buildEventInfo spec' =
+    case spec' of
+        EventBlock end_time cap _block_events ->
+          "event block: cap " <> BB.intDec cap
+          <> ", end time: " <> BB.word64Dec end_time <> "\n"
+        Startup n_caps ->
+          "startup: " <> BB.intDec n_caps <> " capabilities"
+        CreateThread thread ->
+          "creating thread " <> BB.word32Dec thread
+        RunThread thread ->
+          "running thread " <> BB.word32Dec thread
+        StopThread thread status ->
+          "stopping thread " <> BB.word32Dec thread
+          <> " (" <> BB.stringUtf8 (showThreadStopStatus status) <> ")"
+        ThreadRunnable thread ->
+          "thread " <> BB.word32Dec thread <> " is runnable"
+        MigrateThread thread newCap  ->
+          "migrating thread " <> BB.word32Dec thread
+          <> " to cap " <> BB.intDec newCap
+        CreateSparkThread sparkThread ->
+          "creating spark thread " <> BB.word32Dec sparkThread
+        SparkCounters crt dud ovf cnv fiz gcd rem ->
+          "spark stats: "
+          <> BB.word64Dec crt <> " created, "
+          <> BB.word64Dec cnv <> " converted, "
+          <> BB.word64Dec rem <> " remaining ("
+          <> BB.word64Dec ovf <> " overflowed, "
+          <> BB.word64Dec dud <> " dud, "
+          <> BB.word64Dec gcd <> " GC'd, "
+          <> BB.word64Dec fiz <> " fizzled)"
+        SparkCreate ->
+          "spark created"
+        SparkDud ->
+          "dud spark discarded"
+        SparkOverflow ->
+          "overflowed spark discarded"
+        SparkRun ->
+          "running a local spark"
+        SparkSteal victimCap ->
+          "stealing a spark from cap " <> BB.intDec victimCap
+        SparkFizzle ->
+          "spark fizzled"
+        SparkGC ->
+          "spark GCed"
+        TaskCreate taskId cap tid ->
+          "task 0x" <> BB.word64Hex taskId
+          <> " created on cap " <> BB.intDec cap
+          <>" with OS kernel thread " <> BB.word64Dec (kernelThreadId tid)
+        TaskMigrate taskId cap new_cap ->
+          "task 0x" <> BB.word64Hex taskId
+          <> " migrated from cap " <> BB.intDec cap
+          <> " to cap " <> BB.intDec new_cap
+        TaskDelete taskId ->
+          "task 0x" <> BB.word64Hex taskId <> " deleted"
+        Shutdown ->
+          "shutting down"
+        WakeupThread thread otherCap ->
+          "waking up thread " <> BB.word32Dec thread
+          <> " on cap " <> BB.intDec otherCap
+        ThreadLabel thread label ->
+          "thread " <> BB.word32Dec thread
+          <> " has label \"" <> BB.stringUtf8 label <> "\""
+        RequestSeqGC ->
+          "requesting sequential GC"
+        RequestParGC ->
+          "requesting parallel GC"
+        StartGC ->
+          "starting GC"
+        EndGC ->
+          "finished GC"
+        GCWork ->
+          "GC working"
+        GCIdle ->
+          "GC idle"
+        GCDone ->
+          "GC done"
+        GlobalSyncGC ->
+          "all caps stopped for GC"
+        GCStatsGHC{..} ->
+          "GC stats for heap capset " <> BB.word32Dec heapCapset
+          <> ": generation " <> BB.intDec gen <> ", "
+          <> BB.word64Dec copied <> " bytes copied, "
+          <> BB.word64Dec slop <> " bytes slop, "
+          <> BB.word64Dec frag <> " bytes fragmentation, "
+          <> BB.intDec parNThreads <> " par threads, "
+          <> BB.word64Dec parMaxCopied <> " bytes max par copied, "
+          <> BB.word64Dec parTotCopied <> " bytes total par copied"
+        HeapAllocated{..} ->
+          "allocated on heap capset " <> BB.word32Dec heapCapset
+          <> ": " <> BB.word64Dec allocBytes <> " total bytes till now"
+        HeapSize{..} ->
+          "size of heap capset " <> BB.word32Dec heapCapset
+          <> ": " <> BB.word64Dec sizeBytes <> " bytes"
+        HeapLive{..} ->
+          "live data in heap capset " <> BB.word32Dec heapCapset
+          <> ": " <> BB.word64Dec liveBytes <> " bytes"
+        HeapInfoGHC{..} ->
+          "heap stats for heap capset " <> BB.word32Dec heapCapset
+          <> ": generations " <> BB.intDec gens <> ", "
+          <> BB.word64Dec maxHeapSize <> " bytes max heap size, "
+          <> BB.word64Dec allocAreaSize <> " bytes alloc area size, "
+          <> BB.word64Dec mblockSize <> " bytes mblock size, "
+          <> BB.word64Dec blockSize <> " bytes block size"
+        CapCreate{cap} ->
+          "created cap " <> BB.intDec cap
+        CapDelete{cap} ->
+          "deleted cap " <> BB.intDec cap
+        CapDisable{cap} ->
+          "disabled cap " <> BB.intDec cap
+        CapEnable{cap} ->
+          "enabled cap " <> BB.intDec cap
+        Message msg ->
+          BB.stringUtf8 msg
+        UserMessage msg ->
+          BB.stringUtf8 msg
+        UserMarker markername ->
+          "marker: " <> BB.stringUtf8 markername
+        CapsetCreate cs ct ->
+          "created capset " <> BB.word32Dec cs
+          <> " of type " <> BB.stringUtf8 (show ct)
+        CapsetDelete cs ->
+          "deleted capset " <> BB.word32Dec cs
+        CapsetAssignCap cs cp ->
+          "assigned cap " <> BB.intDec cp <> " to capset " <> BB.word32Dec cs
+        CapsetRemoveCap cs cp ->
+          "removed cap " <> BB.intDec cp <> " from capset " <> BB.word32Dec cs
+        OsProcessPid cs pid ->
+          "capset " <> BB.word32Dec cs <> ": pid " <> BB.word32Dec pid
+        OsProcessParentPid cs ppid ->
+          "capset " <> BB.word32Dec cs <> ": parent pid " <> BB.word32Dec ppid
+        WallClockTime cs sec nsec ->
+          "capset " <> BB.word32Dec cs <> ": wall clock time "
+          <> BB.word64Dec sec <> "s "
+          <> BB.word32Dec nsec <> "ns (unix epoch)"
+        RtsIdentifier cs i ->
+          "capset " <> BB.word32Dec cs
+          <> ": RTS version \"" <> BB.stringUtf8 i <> "\""
+        ProgramArgs cs args ->
+          "capset " <> BB.word32Dec cs
+          <> ": args: " <> BB.stringUtf8 (show args)
+        ProgramEnv cs env ->
+          "capset " <> BB.word32Dec cs
+          <> ": env: " <> BB.stringUtf8 (show env)
+        UnknownEvent n ->
+          "Unknown event type " <> BB.word16Dec n
+        InternString str sId ->
+          "Interned string: \"" <> BB.stringUtf8 str
+          <> "\" with id " <> BB.word32Dec sId
+        -- events for the parallel RTS
+        Version version ->
+          "compiler version is " <> BB.stringUtf8 version
+        ProgramInvocation  commandline ->
+          "program invocation: " <> BB.stringUtf8 commandline
+        EdenStartReceive ->
+          "starting to receive"
+        EdenEndReceive ->
+          "stop receiving"
+        CreateProcess  process ->
+          "creating process " <> BB.word32Dec process
+        KillProcess process ->
+          "killing process " <> BB.word32Dec process
+        AssignThreadToProcess thread process ->
+          "assigning thread " <> BB.word32Dec thread
+          <> " to process " <> BB.word32Dec process
+        CreateMachine machine realtime ->
+          "creating machine " <> BB.word16Dec machine
+          <> " at " <> BB.word64Dec realtime
+        KillMachine machine ->
+          "killing machine " <> BB.word16Dec machine
+        SendMessage mesTag senderProcess senderThread
+          receiverMachine receiverProcess receiverInport ->
+            "sending message with tag " <> BB.stringUtf8 (show mesTag)
+            <> " from process " <> BB.word32Dec senderProcess
+            <> ", thread " <> BB.word32Dec senderThread
+            <> " to machine " <> BB.word16Dec receiverMachine
+            <> ", process " <> BB.word32Dec receiverProcess
+            <> " on inport " <> BB.word32Dec receiverInport
+        ReceiveMessage mesTag receiverProcess receiverInport
+          senderMachine senderProcess senderThread messageSize ->
+            "receiving message with tag " <> BB.stringUtf8 (show mesTag)
+            <> " at process " <> BB.word32Dec receiverProcess
+            <> ", inport " <> BB.word32Dec receiverInport
+            <> " from machine " <> BB.word16Dec senderMachine
+            <> ", process " <> BB.word32Dec senderProcess
+            <> ", thread " <> BB.word32Dec senderThread
+            <> " with size " <> BB.word32Dec messageSize
+        SendReceiveLocalMessage mesTag senderProcess senderThread
+          receiverProcess receiverInport ->
+            "sending/receiving message with tag " <> BB.stringUtf8 (show mesTag)
+            <> " from process " <> BB.word32Dec senderProcess
+            <> ", thread " <> BB.word32Dec senderThread
+            <> " to process " <> BB.word32Dec receiverProcess
+            <> " on inport " <> BB.word32Dec receiverInport
+        MerStartParConjunction dyn_id static_id ->
+          "Start a parallel conjunction 0x" <> BB.word64Hex dyn_id
+          <> ", static_id: " <> BB.word32Dec static_id
+        MerEndParConjunction dyn_id ->
+          "End par conjunction: 0x" <> BB.word64Hex dyn_id
+        MerEndParConjunct dyn_id ->
+          "End par conjunct: 0x" <> BB.word64Hex dyn_id
+        MerCreateSpark dyn_id spark_id ->
+          "Create spark for conjunction: 0x" <> BB.word64Hex dyn_id
+          <> " spark: 0x" <> BB.word32Hex spark_id
+        MerFutureCreate future_id name_id ->
+          "Create future 0x" <> BB.word64Hex future_id
+          <> " named " <> BB.word32Dec name_id
+        MerFutureWaitNosuspend future_id ->
+          "Wait didn't suspend for future: 0x" <> BB.word64Hex future_id
+        MerFutureWaitSuspended future_id ->
+          "Wait suspended on future: 0x" <> BB.word64Hex future_id
+        MerFutureSignal future_id ->
+          "Signaled future 0x" <> BB.word64Hex future_id
+        MerLookingForGlobalThread ->
+          "Looking for global thread to resume"
+        MerWorkStealing ->
+          "Trying to steal a spark"
+        MerLookingForLocalSpark ->
+          "Looking for a local spark to execute"
+        MerReleaseThread thread_id ->
+          "Releasing thread " <> BB.word32Dec thread_id <> " to the free pool"
+        MerCapSleeping ->
+          "Capability going to sleep"
+        MerCallingMain ->
+          "About to call the program entry point"
+        PerfName{perfNum, name} ->
+          "perf event " <> BB.word32Dec perfNum
+          <> " named \"" <> BB.stringUtf8 name <> "\""
+        PerfCounter{perfNum, tid, period} ->
+          "perf event counter " <> BB.word32Dec perfNum
+          <> " incremented by " <> BB.word64Dec (period + 1)
+          <> " in OS thread " <> BB.word64Dec (kernelThreadId tid)
+        PerfTracepoint{perfNum, tid} ->
+          "perf event tracepoint " <> BB.word32Dec perfNum
+          <> " reached in OS thread " <> BB.word64Dec (kernelThreadId tid)
+
+showThreadStopStatus :: ThreadStopStatus -> String
+showThreadStopStatus HeapOverflow   = "heap overflow"
+showThreadStopStatus StackOverflow  = "stack overflow"
+showThreadStopStatus ThreadYielding = "thread yielding"
+showThreadStopStatus ThreadBlocked  = "thread blocked"
+showThreadStopStatus ThreadFinished = "thread finished"
+showThreadStopStatus ForeignCall    = "making a foreign call"
+showThreadStopStatus BlockedOnMVar  = "blocked on an MVar"
+showThreadStopStatus BlockedOnMVarRead = "blocked reading an MVar"
+showThreadStopStatus BlockedOnBlackHole = "blocked on a black hole"
+showThreadStopStatus BlockedOnRead = "blocked on I/O read"
+showThreadStopStatus BlockedOnWrite = "blocked on I/O write"
+showThreadStopStatus BlockedOnDelay = "blocked on threadDelay"
+showThreadStopStatus BlockedOnSTM = "blocked in STM retry"
+showThreadStopStatus BlockedOnDoProc = "blocked on asyncDoProc"
+showThreadStopStatus BlockedOnCCall = "blocked in a foreign call"
+showThreadStopStatus BlockedOnCCall_NoUnblockExc = "blocked in a foreign call"
+showThreadStopStatus BlockedOnMsgThrowTo = "blocked in throwTo"
+showThreadStopStatus ThreadMigrating = "thread migrating"
+showThreadStopStatus BlockedOnMsgGlobalise = "waiting for data to be globalised"
+showThreadStopStatus (BlockedOnBlackHoleOwnedBy target) =
+          "blocked on black hole owned by thread " ++ show target
+showThreadStopStatus NoStatus = "No stop thread status"
+
+ppEventLog :: EventLog -> String
+ppEventLog = BL8.unpack . BB.toLazyByteString . buildEventLog
+
+buildEventLog :: EventLog -> BB.Builder
+buildEventLog (EventLog (Header ets) (Data es)) =
+  "Event Types:\n"
+  <> foldMap (\evType -> buildEventType evType <> "\n") ets
+  <> "\n"
+  <> "Events:\n"
+  <> foldMap (\ev -> buildEvent imap ev <> "\n") sorted
+  where
+    imap = buildEventTypeMap ets
+    sorted = sortEvents es
+
+ppEventType :: EventType -> String
+ppEventType = BL8.unpack . BB.toLazyByteString . buildEventType
+
+buildEventType :: EventType -> BB.Builder
+buildEventType (EventType num dsc msz) =
+  BB.word16Dec num <> ": "
+  <> BB.stringUtf8 dsc <> " (size "
+  <> maybe "variable" BB.word16Dec msz <> ")"
+
+-- | Pretty prints an 'Event', with clean handling for 'UnknownEvent'
+ppEvent :: IntMap EventType -> Event -> String
+ppEvent imap = BL8.unpack . BB.toLazyByteString . buildEvent imap
+
+buildEvent :: IntMap EventType -> Event -> BB.Builder
+buildEvent imap Event {..} =
+  BB.word64Dec evTime
+  <> ": "
+  <> maybe "" (\c -> "cap " <> BB.intDec c <> ": ") evCap
+  <> case evSpec of
+    UnknownEvent{ ref=ref } ->
+      maybe "" (BB.stringUtf8 . desc) $ IM.lookup (fromIntegral ref) imap
+    _ -> buildEventInfo evSpec
+
+buildEvent' :: Event -> BB.Builder
+buildEvent' Event {..} =
+   BB.word64Dec evTime
+   <> ": "
+   <> maybe "" (\c -> "cap " <> BB.intDec c <> ": ") evCap
+   <> case evSpec of
+     UnknownEvent{ ref=ref } ->
+      "Unknown Event (ref: " <> BB.word16Dec ref <> ")"
+     _ -> buildEventInfo evSpec
diff --git a/src/GHC/RTS/Events/Analysis.hs b/src/GHC/RTS/Events/Analysis.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Analysis.hs
@@ -0,0 +1,272 @@
+module GHC.RTS.Events.Analysis
+  ( Machine (..)
+  , validate
+  , validates
+  , simulate
+  , Profile (..)
+  , profile
+  , profileIndexed
+  , profileRouted
+  , extractIndexed
+  , refineM
+  , profileM
+  , indexM
+  , toList
+  , toMaybe
+  , Process (..)
+  , routeM
+  )
+ where
+
+import GHC.RTS.Events
+
+import Data.Map (Map)
+import qualified Data.Map as M
+import Data.Maybe (fromMaybe)
+
+--------------------------------------------------------------------------------
+-- | This is based on a simple finite state machine hence the names `delta`
+-- for the state transition function.
+-- Since states might be more than simple pattern matched constructors, we
+-- use `finals :: state -> Bool`, rather than `Set state`, to indicate that
+-- the machine is in some final state. Similarly for `alpha`, which
+-- indicates the alphabet of inputs to a machine.
+-- The function `delta` returns `Maybe` values, where `Nothing`
+-- indicates that no valid transition is possible: ie, there has been an
+-- error.
+data Machine s i = Machine
+  { initial :: s                 -- ^ Initial state
+  , final   :: s -> Bool         -- ^ Valid final states
+  , alpha   :: i -> Bool         -- ^ Valid input alphabet
+  , delta   :: s -> i -> Maybe s -- ^ State transition function
+  }
+
+-- | The `step` function runs a machine in a state against a single input.
+-- The state remains fixed once a final state is encountered. The
+-- result is `Left state input` if some `state` failed for an `ìnput`, and
+-- `Right state` for a successful state.
+step :: Machine s i -> s -> i -> Either (s, i) s
+step m s i
+  | final m s = Right s
+  | alpha m i = case delta m s i of
+      Just s' -> Right s'
+      Nothing -> Left (s, i)
+  | otherwise = Right s
+
+-- | The `validate` function takes a machine and a list of inputs. The machine
+-- is started from its initial state and run against the inputs in turn.
+-- It returns the state and input on failure, and just the state on success.
+validate :: Machine s i -> [i] -> Either (s, i) s
+validate m = foldl (>>=) (Right (initial m)) . map (flip (step m))
+
+-- | This function is similar to `validate`, but outputs each intermediary
+-- state as well. For an incremental version, use `simulate`.
+validates :: Machine s i -> [i] -> [Either (s, i) s]
+validates m = scanl (>>=) (Right (initial m)) . map (flip (step m))
+
+--------------------------------------------------------------------------------
+-- A Process is a list of successful values, followed by an error if one
+-- occured. This captures the idea that a computation may produce a list of
+-- elements before possibly failing. This gives us an incremental interface
+-- to data processed from machine transitions.
+data Process e a
+  = Done
+  | Fail e
+  | Prod a (Process e a)
+ deriving Show
+
+toList :: Process e a -> [a]
+toList (Fail _)    = []
+toList Done        = []
+toList (Prod a as) = a : toList as
+
+toMaybe :: Process e a -> Maybe e
+toMaybe (Fail e)    = Just e
+toMaybe Done        = Nothing
+toMaybe (Prod _ as) = toMaybe as
+
+-- | A machine can be analysed while it is accepting input in order to extract
+-- some information. This function takes a machine and a function that extracts
+-- data and produces output. On failure, the machine state and input are
+-- produced. Note that when an input is not in the machine's alphabet,
+-- then there is no transition, and so no output is produced in response
+-- to that input.
+analyse :: Machine s i          -- ^ The machine used
+        -> (s -> i -> Maybe o)  -- ^ An extraction function that may produce output
+        -> [i]                  -- ^ A list of input
+        -> Process (s, i) o     -- ^ A process that produces output
+analyse machine extract = go (initial machine)
+ where
+  -- go :: s -> [i] -> Process (s, i) o
+  go _ [] = Done
+  go s (i:is)
+    | final machine s = Done
+    | alpha machine i =
+        case delta machine s i of
+          Nothing -> Fail (s, i)
+          Just s' ->
+            case extract s i of
+              Nothing -> go s' is
+              Just o  -> Prod o (go s' is)
+    | otherwise = go s is
+
+-- | Machines sometimes need to operate on coarser input than they are defined
+-- for. This function takes a function that refines input and a machine that
+-- works on refined input, and produces a machine that can work on coarse input.
+refineM :: (i -> j) -> Machine s j -> Machine s i
+refineM refine machine = Machine
+  { initial = initial machine
+  , final   = final machine
+  , alpha   = alpha machine . refine
+  , delta   = \s -> delta machine s . refine
+  }
+
+--------------------------------------------------------------------------------
+-- | This function produces a process that outputs all the states that a
+-- machine goes through.
+simulate :: Machine s i -> [i] -> Process (s, i) (s, i)
+simulate machine = analyse machine (\s i -> delta machine s i >>= \s' -> return (s', i))
+
+--------------------------------------------------------------------------------
+-- | A state augmented by Timestamp information is held in `profileState`.
+-- When the state changes, `profileMap` stores a map between each state
+-- and its cumulative time.
+data Profile s = Profile
+  { profileState :: s               -- ^ The current state
+  , profileTime  :: Timestamp       -- ^ The entry time of the state
+  } deriving (Show)
+
+-- | This function takes a machine and profiles its state.
+profileM :: Ord s
+         => (i -> Timestamp)
+         -> Machine s i
+         -> Machine (Profile s) i
+profileM timer machine = Machine
+  { initial = Profile (initial machine) 0
+  , final   = final machine . profileState
+  , alpha   = alpha machine
+  , delta   = profileMDelta
+  }
+ where
+  profileMDelta (Profile s _) i = do
+    s' <- delta machine s i
+    return $ Profile s' (timer i)
+
+-- | extractProfile returns the state, the time this state was made,
+-- and the time spent in this state.
+extractProfile :: (i -> Timestamp)                -- ^ Extracts current timestamp
+               -> Profile s                       -- ^ A profiled state
+               -> i                               -- ^ Some input
+               -> Maybe (s, Timestamp, Timestamp) -- ^ (state, currentTime, elapsedTime)
+extractProfile timer p i = Just (profileState p, profileTime p, timer i - profileTime p)
+
+profile :: (Ord s, Eq s)
+        => Machine s i       -- ^ A machine to profile
+        -> (i -> Timestamp)  -- ^ Converts input to timestamps
+        -> [i]               -- ^ The list of input
+        -> Process (Profile s, i) (s, Timestamp, Timestamp)
+profile machine timer =
+  analyse (profileM timer machine)
+          (extractProfile timer)
+
+profileIndexed :: (Ord k, Ord s, Eq s)
+               => Machine s i
+               -> (i -> Maybe k)
+               -> (i -> Timestamp)
+               -> [i]
+               -> Process (Map k (Profile s), i) (k, (s, Timestamp, Timestamp))
+profileIndexed machine index timer =
+  analyse (indexM index (profileM timer machine))
+          (extractIndexed (extractProfile timer) index)
+
+extractIndexed :: Ord k => (s -> i -> Maybe o) -> (i -> Maybe k) -> (Map k s -> i -> Maybe (k, o))
+extractIndexed extract index m i = do
+  k <- index i
+  s <- M.lookup k m
+  o <- extract s i
+  return (k, o)
+
+-- | An indexed machine takes a function that multiplexes the input to a key
+-- and then takes a machine description to an indexed machine.
+indexM :: Ord k
+       => (i -> Maybe k)        -- ^ An indexing function
+       -> Machine s i           -- ^ A machine to index with
+       -> Machine (Map k s) i   -- ^ The indexed machine
+indexM index machine = Machine
+  { initial = M.empty
+  , final   = indexMFinal
+  , alpha   = indexMAlpha
+  , delta   = indexMDelta
+  }
+ where
+  -- An indexer never reaches a final state: it is always possible that
+  -- an event comes along that is accepted by a machine that is not
+  -- yet in in the index.
+  --
+  -- An alternative view is that the indexer is in a final state if all its
+  -- elements are, but this would not allow the creation of new indexes:
+  --     indexMFinal m = not (M.null m) && (all (final machine) . M.elems $ m)
+  indexMFinal = const False
+
+  -- The alphabet of the indexer is that of its elements.
+  indexMAlpha = alpha machine
+
+  -- If the index is not yet in the mapping, we start a new machine in its
+  -- initial state. The indexer fails if indexed state fails.
+  indexMDelta m i = do
+    k <- index i
+    let state = fromMaybe (initial machine) (M.lookup k m)
+    state' <- delta machine state i
+    return $ M.insert k state' m
+
+profileRouted :: (Ord k, Ord s, Eq s, Eq r)
+              => Machine s i
+              -> Machine r i
+              -> (r -> i -> Maybe k)
+              -> (i -> Timestamp)
+              -> [i]
+              -> Process ((Map k (Profile s), r), i) (k, (s, Timestamp, Timestamp))
+profileRouted machine router index timer =
+  analyse (routeM router index (profileM timer machine))
+          (extractRouted (extractProfile timer) index)
+
+extractRouted :: Ord k => (s -> i -> Maybe o) -> (r -> i -> Maybe k) -> ((Map k s, r)  -> i -> Maybe (k, o))
+extractRouted extract index (m, r) i = do
+  k <- index r i
+  s <- M.lookup k m
+  o <- extract s i
+  return (k, o)
+
+
+-- | A machine can be indexed not only by the inputs, but also by the state
+-- of an intermediary routing machine. This is a generalisation of indexM.
+routeM :: (Ord k)
+       => Machine r i
+       -> (r -> i -> Maybe k)
+       -> Machine s i
+       -> Machine (Map k s, r) i
+routeM router index machine = Machine
+  { initial = (M.empty, initial router)
+  , final   = routeMFinal
+  , alpha   = routeMAlpha
+  , delta   = routeMDelta
+  }
+ where
+  -- As with indexers, there is no final state.
+  routeMFinal = const False
+
+  -- The alphabet is that of the router combined with the machine
+  routeMAlpha i = alpha router i || alpha machine i
+
+  routeMDelta (m, r) i = do
+    r' <- if alpha router i
+          then delta router r i
+          else return r
+    m' <- if alpha machine i
+          then case index r' i of
+            Just k -> do
+              s' <- delta machine (fromMaybe (initial machine) (M.lookup k m)) i
+              return $ M.insert k s' m
+            Nothing -> return m
+          else return m
+    return (m', r')
diff --git a/src/GHC/RTS/Events/Analysis/Capability.hs b/src/GHC/RTS/Events/Analysis/Capability.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Analysis/Capability.hs
@@ -0,0 +1,209 @@
+module GHC.RTS.Events.Analysis.Capability
+  ( capabilityThreadPoolMachine
+  , capabilityThreadRunMachine
+  , capabilityThreadIndexer
+  , capabilityTaskPoolMachine
+  , capabilityTaskOSMachine
+  )
+ where
+
+import GHC.RTS.Events
+import GHC.RTS.Events.Analysis
+
+import Data.Map (Map)
+import qualified Data.Map as M
+
+-- | This state machine tracks threads residing on capabilities.
+-- Each thread can only reside on one capability, but can be migrated between
+-- them.
+capabilityThreadPoolMachine :: Machine (Map ThreadId Int) Event
+capabilityThreadPoolMachine = Machine
+  { initial = M.empty
+  , final   = const False
+  , alpha   = capabilityThreadPoolMachineAlpha
+  , delta   = capabilityThreadPoolMachineDelta
+  }
+ where
+  capabilityThreadPoolMachineAlpha evt = case evSpec evt of
+     (CreateThread _)    -> True
+     (StopThread _ _)    -> True
+     (MigrateThread _ _) -> True
+     _                   -> False
+
+  capabilityThreadPoolMachineDelta mapping evt = do
+    capId <- evCap evt
+    case evSpec evt of
+      (CreateThread threadId)              -> insertThread threadId capId mapping
+      (StopThread threadId ThreadFinished) -> deleteThread threadId mapping
+      (StopThread _ _)                     -> Just mapping
+      (MigrateThread threadId capId')      -> deleteThread threadId mapping >>=
+                                                insertThread threadId capId'
+      _                                    -> Nothing
+   where
+    insertThread :: ThreadId -> Int -> Map ThreadId Int -> Maybe (Map ThreadId Int)
+    insertThread threadId capId m
+      | threadId `M.member` m = Nothing -- The thread already exists
+      | otherwise             = Just $ M.insert threadId capId m
+
+    deleteThread :: ThreadId -> Map ThreadId Int -> Maybe (Map ThreadId Int)
+    deleteThread threadId m
+      | threadId `M.notMember` m = Nothing -- The thread doesn't exist
+      | otherwise                = Just $ M.delete threadId m
+
+-- | This state machine tracks threads running on capabilities, only one thread
+-- may run on a capability at a time.
+capabilityThreadRunMachine :: Machine (Map Int ThreadId) Event
+capabilityThreadRunMachine = Machine
+  { initial = M.empty
+  , final   = const False
+  , alpha   = threadRunAlpha
+  , delta   = threadRunDelta
+  }
+ where
+  threadRunAlpha event = case evSpec event of
+    -- TODO: can threads be migrated while they are running?
+    -- TODO: take into account paused threads
+    (RunThread _)     -> True
+    (StopThread _ _ ) -> True
+    _                 -> False
+
+  -- The indexer fails if a thread is inserted where one already exists,
+  -- or if a thread is deleted that doesn't exist.
+  threadRunDelta mapping e = do
+    capId <- evCap e
+    case evSpec $ e of
+      (RunThread threadId)     -> runThread capId threadId mapping
+      (StopThread threadId _ ) -> stopThread threadId mapping
+      _                        -> Just mapping
+   where
+    runThread :: Int -> ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)
+    runThread capId threadId m
+      | capId `M.member` m        = Nothing -- A thread is already on this cap
+      | threadId `elem` M.elems m = Nothing -- This thread is already on a cap
+      | otherwise                 = Just $ M.insert capId threadId m
+    stopThread :: ThreadId -> Map Int ThreadId -> Maybe (Map Int ThreadId)
+    stopThread threadId m
+      | notElem threadId . M.elems $ m = Nothing -- The thread doesn't exist
+      | otherwise                      = Just $ M.filter (/= threadId) m
+
+capabilityThreadIndexer :: Map Int ThreadId -> Event -> Maybe ThreadId
+capabilityThreadIndexer m evt = case evSpec evt of
+  (CreateSparkThread threadId)  -> Just threadId
+  (CreateThread threadId)       -> Just threadId
+  (RunThread threadId)          -> Just threadId
+  (StopThread threadId _)       -> Just threadId
+  (ThreadRunnable threadId)     -> Just threadId
+  (MigrateThread threadId _)    -> Just threadId
+  (WakeupThread threadId capId) -> if Just capId == evCap evt
+                                   then Just threadId
+                                   else Nothing
+  _                             -> mThreadId
+ where
+  mThreadId = evCap evt >>= (\capId -> M.lookup capId m)
+
+-- | This state machine tracks Haskell tasks, represented by TaskId,
+-- residing on capabilities.
+-- Each Haskell task can only reside on one capability, but can be migrated
+-- between them.
+capabilityTaskPoolMachine :: Machine (Map TaskId Int) Event
+capabilityTaskPoolMachine = Machine
+  { initial = M.empty
+  , final   = const False
+  , alpha   = capabilityTaskPoolMachineAlpha
+  , delta   = capabilityTaskPoolMachineDelta
+  }
+ where
+  capabilityTaskPoolMachineAlpha evt = case evSpec evt of
+     TaskCreate{}  -> True
+     TaskDelete{}  -> True
+     TaskMigrate{} -> True
+     _             -> False
+
+  capabilityTaskPoolMachineDelta mapping evt = do
+    case evSpec evt of
+      TaskCreate {taskId, cap}           -> insertTask taskId cap mapping
+      TaskDelete {taskId}                -> deleteTask taskId Nothing mapping
+      TaskMigrate {taskId, cap, new_cap} ->
+        deleteTask taskId (Just cap) mapping >>=
+          insertTask taskId new_cap
+      _                                  -> Nothing
+   where
+    insertTask :: TaskId -> Int -> Map TaskId Int
+               -> Maybe (Map TaskId Int)
+    insertTask taskId cap m
+      | taskId `M.member` m = Nothing  -- The task already exists.
+      | otherwise           = Just $ M.insert taskId cap m
+
+    deleteTask :: TaskId -> Maybe Int -> Map TaskId Int
+               -> Maybe (Map TaskId Int)
+    deleteTask taskId expectedcap m
+      | Just oldcap <- M.lookup taskId m
+      , maybe True (==oldcap) expectedcap
+      = Just $ M.delete taskId m
+      | otherwise
+      = Nothing  -- The task doesn't exist, or does but with an unexpected cap.
+
+-- | This state machine tracks Haskell tasks (represented by the KernelThreadId
+-- of their OS thread) residing on capabilities and additionally
+-- tracks the (immutable) assignment of OS thread ids (KernelThreadId)
+-- to tasks ids (TaskId).
+-- Each Haskell task can only reside on one capability, but can be migrated
+-- between them.
+--
+-- Invariant for the @(Map KernelThreadId Int, Map TaskId KernelThreadId)@ 
+-- type: the second map is an injection (verified by the machine 
+-- in 'insertTaskOS') and the following sets are equal: 
+-- keys of the fist map and values of the second
+-- (follows from the construction of the maps by the machine).
+--
+-- The machine verifies as much as 'capabilityTaskPoolMachine' and additionally
+-- the data invariant, and offers a richer verification profile.
+capabilityTaskOSMachine :: Machine (Map KernelThreadId Int,
+                                    Map TaskId KernelThreadId)
+                                   Event
+capabilityTaskOSMachine = Machine
+  { initial = (M.empty, M.empty)
+  , final   = const False
+  , alpha   = capabilityTaskOSMachineAlpha
+  , delta   = capabilityTaskOSMachineDelta
+  }
+ where
+  capabilityTaskOSMachineAlpha evt = case evSpec evt of
+     TaskCreate{}  -> True
+     TaskDelete{}  -> True
+     TaskMigrate{} -> True
+     _             -> False
+
+  capabilityTaskOSMachineDelta mapping evt = do
+    case evSpec evt of
+      TaskCreate {taskId, cap, tid} -> insertTaskOS taskId cap tid mapping
+      TaskDelete {taskId}           -> deleteTaskOS taskId mapping
+      TaskMigrate {taskId, new_cap} -> migrateTaskOS taskId new_cap mapping
+      _                             -> Nothing
+   where
+    insertTaskOS :: TaskId -> Int -> KernelThreadId
+                 -> (Map KernelThreadId Int, Map TaskId KernelThreadId)
+                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)
+    insertTaskOS taskId cap tid (m, ma)
+      | taskId `M.member` ma = Nothing  -- The task already exists.
+      | tid `M.member` m     = Nothing  -- The OS thread already exists.
+      | otherwise            = Just (M.insert tid cap m,
+                                     M.insert taskId tid ma)
+
+    deleteTaskOS :: TaskId -> (Map KernelThreadId Int,
+                               Map TaskId KernelThreadId)
+                 -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)
+    deleteTaskOS taskId (m, ma) =
+      case M.lookup taskId ma of
+        Nothing  -> Nothing  -- The task doesn't exist.
+        Just tid -> Just (M.delete tid m,
+                          M.delete taskId ma)
+
+    migrateTaskOS :: TaskId -> Int -> (Map KernelThreadId Int,
+                                       Map TaskId KernelThreadId)
+                  -> Maybe (Map KernelThreadId Int, Map TaskId KernelThreadId)
+    migrateTaskOS taskId new_cap (m, ma) =
+      case M.lookup taskId ma of
+        Nothing -> Nothing  -- The task doesn't exist.
+        Just tid -> Just (M.insert tid new_cap m,
+                          ma)  -- The assignment is immutable.
diff --git a/src/GHC/RTS/Events/Analysis/SparkThread.hs b/src/GHC/RTS/Events/Analysis/SparkThread.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Analysis/SparkThread.hs
@@ -0,0 +1,110 @@
+module GHC.RTS.Events.Analysis.SparkThread
+  ( SparkThreadState (..)
+  , sparkThreadMachine
+  , capabilitySparkThreadMachine
+  , capabilitySparkThreadIndexer
+  )
+ where
+
+import GHC.RTS.Events
+import GHC.RTS.Events.Analysis
+
+import Data.Map (Map)
+import qualified Data.Map as M
+import Data.Set (Set)
+import qualified Data.Set as S
+
+data SparkThreadState
+  = SparkThreadInitial
+  | SparkThreadCreated
+  | SparkThreadRunning Int
+  | SparkThreadPaused Int
+  | SparkThreadFinal
+  deriving (Eq, Ord, Show)
+
+sparkThreadMachine :: Machine SparkThreadState EventInfo
+sparkThreadMachine = Machine
+  { initial = SparkThreadInitial
+  , final   = sparkThreadFinal
+  , alpha   = sparkThreadAlpha
+  , delta   = sparkThreadDelta
+  }
+ where
+  sparkThreadFinal SparkThreadFinal = True
+  sparkThreadFinal _                = False
+
+  -- sparkThreadAlpha (CreateSparkThread _) = True
+  sparkThreadAlpha (RunThread _)         = True
+  sparkThreadAlpha (StopThread _ _)      = True
+  sparkThreadAlpha SparkRun              = True
+  sparkThreadAlpha (SparkSteal _)        = True
+  sparkThreadAlpha _                     = False
+
+  -- SparkThreadInitial
+  -- sparkThreadDelta SparkThreadInitial (CreateSparkThread _) = Just SparkThreadInitial
+  sparkThreadDelta SparkThreadInitial (RunThread _)         = Just SparkThreadCreated
+  -- SparkThreadCreated
+  sparkThreadDelta SparkThreadCreated SparkRun                      = Just (SparkThreadRunning 0)
+  sparkThreadDelta SparkThreadCreated (SparkSteal _)                = Just (SparkThreadRunning 0)
+  sparkThreadDelta SparkThreadCreated (StopThread _ ThreadFinished) = Just SparkThreadFinal
+  -- SparkThreadRunning
+  sparkThreadDelta (SparkThreadRunning _) (StopThread _ ThreadFinished) = Just SparkThreadFinal
+  sparkThreadDelta (SparkThreadRunning n) (StopThread _ _)              = Just (SparkThreadPaused n)
+  sparkThreadDelta (SparkThreadRunning n) SparkRun                      = Just (SparkThreadRunning (n+1))
+  sparkThreadDelta (SparkThreadRunning n) (SparkSteal _)                = Just (SparkThreadRunning (n+1))
+  -- SparkThreadPaused
+  sparkThreadDelta (SparkThreadPaused n) (RunThread _) = Just (SparkThreadRunning n)
+  -- Other
+  sparkThreadDelta _ _ = Nothing
+
+capabilitySparkThreadMachine :: Machine (Map Int ThreadId, Set ThreadId) Event
+capabilitySparkThreadMachine = Machine
+  { initial = (M.empty, S.empty)
+  , final   = const False
+  , alpha   = capabilitySparkThreadAlpha
+  , delta   = capabilitySparkThreadDelta
+  }
+ where
+  capabilitySparkThreadAlpha evt = case evSpec evt of
+    (CreateSparkThread _)         -> True
+    (RunThread _)                 -> True
+    (StopThread _ _)              -> True
+    _                             -> False
+  capabilitySparkThreadDelta (m, s) evt = do
+    capId <- evCap evt
+    case evSpec evt of
+      (CreateSparkThread threadId)         -> createThread threadId
+      (StopThread threadId _)              -> pauseThread threadId
+      (RunThread threadId)                 -> runThread capId threadId
+      _                                    -> Just (m, s)
+   where
+    createThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
+    createThread threadId
+      | S.member threadId s = Nothing -- A spark thread with this Id already created
+      | otherwise           = Just (m, S.insert threadId s)
+
+    runThread :: Int -> ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
+    runThread capId threadId
+      | M.member capId m          = Nothing      -- A thread is already on this cap
+      | threadId `elem` M.elems m = Nothing      -- This thread is already on a cap
+      | S.notMember threadId s    = Just (m, s)  -- Not a spark thread
+      | otherwise                 = Just (M.insert capId threadId m, S.insert threadId s)
+
+    stopThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
+    stopThread threadId = Just (M.filter (/= threadId) m, S.delete threadId s)
+
+    pauseThread :: ThreadId -> Maybe (Map Int ThreadId, Set ThreadId)
+    pauseThread threadId = Just (M.filter (/= threadId) m, s)
+
+capabilitySparkThreadIndexer :: (Map Int ThreadId, Set ThreadId) -> Event -> Maybe ThreadId
+capabilitySparkThreadIndexer (m, s) evt = case evSpec evt of
+  (CreateThread threadId)   -> inSparkThreadPool threadId
+  (RunThread threadId)      -> inSparkThreadPool threadId
+  (StopThread threadId _)   -> inSparkThreadPool threadId
+  _                         -> evCap evt >>= (\capId -> M.lookup capId m)
+ where
+  inSparkThreadPool :: ThreadId -> Maybe ThreadId
+  inSparkThreadPool threadId
+    | S.member threadId s = Just threadId
+    | otherwise           = Nothing
+
diff --git a/src/GHC/RTS/Events/Analysis/Thread.hs b/src/GHC/RTS/Events/Analysis/Thread.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Analysis/Thread.hs
@@ -0,0 +1,53 @@
+module GHC.RTS.Events.Analysis.Thread
+  ( ThreadState (..)
+  , threadMachine
+  )
+ where
+
+import GHC.RTS.Events
+import GHC.RTS.Events.Analysis
+
+--------------------------------------------------------------------------------
+-- | This datatype defines the state machine for a single thread.
+data ThreadState
+  = ThreadInitial
+  | ThreadQueued
+  | ThreadRunning
+  | ThreadStopped
+  | ThreadFinal
+  deriving (Show, Eq, Ord)
+
+-- | This state machine tracks the events processed by a thread.
+threadMachine :: Machine ThreadState EventInfo
+threadMachine = Machine
+  { initial = ThreadInitial
+  , final   = threadFinal
+  , alpha   = threadAlpha
+  , delta   = threadDelta
+  }
+ where
+  threadFinal ThreadFinal   = True
+  threadFinal _             = False
+
+  threadAlpha (CreateThread _)   = True
+  threadAlpha (RunThread _)      = True
+  threadAlpha (StopThread _ _)   = True
+  threadAlpha (WakeupThread _ _) = True
+  threadAlpha _                  = False
+
+  -- ThreadInitial
+  threadDelta ThreadInitial (CreateThread _) = Just ThreadQueued
+  -- ThreadQueued
+  threadDelta ThreadQueued (RunThread _)      = Just ThreadRunning
+  threadDelta ThreadQueued (WakeupThread _ _) = Just ThreadQueued
+  -- ThreadRunning
+  threadDelta ThreadRunning (StopThread _ StackOverflow)  = Just ThreadQueued
+  threadDelta ThreadRunning (StopThread _ HeapOverflow)   = Just ThreadQueued
+  threadDelta ThreadRunning (StopThread _ ForeignCall)    = Just ThreadQueued
+  threadDelta ThreadRunning (StopThread _ ThreadFinished) = Just ThreadFinal
+  threadDelta ThreadRunning (StopThread _ _)              = Just ThreadStopped
+  -- ThreadStopped
+  threadDelta ThreadStopped (RunThread _)      = Just ThreadRunning
+  threadDelta ThreadStopped (WakeupThread _ _) = Just ThreadQueued
+  -- Unknown
+  threadDelta _ _ = Nothing
diff --git a/src/GHC/RTS/Events/Binary.hs b/src/GHC/RTS/Events/Binary.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Binary.hs
@@ -0,0 +1,1228 @@
+{-# LANGUAGE CPP #-}
+module GHC.RTS.Events.Binary
+  ( -- * Readers
+    getHeader
+  , getEvent
+  , standardParsers
+  , ghc6Parsers
+  , ghc7Parsers
+  , mercuryParsers
+  , perfParsers
+  , pre77StopParsers
+  , ghc782StopParser
+  , post782StopParser
+  , parRTSParsers
+
+  -- * Writers
+  , putEventLog
+  , putHeader
+  , putEvent
+
+  -- * Perf events
+  , nEVENT_PERF_NAME
+  , nEVENT_PERF_COUNTER
+  , nEVENT_PERF_TRACEPOINT
+
+  ) where
+import Control.Monad
+import Data.Maybe
+import Prelude hiding (gcd, rem, id)
+
+import Data.Array
+import Data.Binary
+import Data.Binary.Put
+import qualified Data.Binary.Get as G
+
+import GHC.RTS.EventTypes
+import GHC.RTS.EventParserUtils
+
+#define EVENTLOG_CONSTANTS_ONLY
+#include "EventLogFormat.h"
+
+getEventType :: Get EventType
+getEventType = do
+           etNum <- get
+           size <- get :: Get EventTypeSize
+           let etSize = if size == 0xffff then Nothing else Just size
+           -- 0xffff indicates variable-sized event
+           etDescLen <- get :: Get EventTypeDescLen
+           etDesc <- getEtDesc (fromIntegral etDescLen)
+           etExtraLen <- get :: Get Word32
+           G.skip (fromIntegral etExtraLen)
+           ete <- get :: Get Marker
+           when (ete /= EVENT_ET_END) $
+              fail "Event Type end marker not found."
+           return (EventType etNum etDesc etSize)
+           where
+             getEtDesc :: Int -> Get [Char]
+             getEtDesc s = replicateM s (get :: Get Char)
+
+getHeader :: Get Header
+getHeader = do
+            hdrb <- get :: Get Marker
+            when (hdrb /= EVENT_HEADER_BEGIN) $
+                 fail "Header begin marker not found"
+            hetm <- get :: Get Marker
+            when (hetm /= EVENT_HET_BEGIN) $
+                 fail "Header Event Type begin marker not found"
+            ets <- getEventTypes
+            emark <- get :: Get Marker
+            when (emark /= EVENT_HEADER_END) $
+                 fail "Header end marker not found"
+            db <- get :: Get Marker
+            when (db /= EVENT_DATA_BEGIN) $
+                  fail "My Data begin marker not found"
+            return $ Header ets
+     where
+      getEventTypes :: Get [EventType]
+      getEventTypes = do
+          m <- get :: Get Marker
+          case m of
+             EVENT_ET_BEGIN -> do
+                  et <- getEventType
+                  nextET <- getEventTypes
+                  return (et : nextET)
+             EVENT_HET_END ->
+                  return []
+             _ ->
+                  fail "Malformed list of Event Types in header"
+
+getEvent :: EventParsers -> Get (Maybe Event)
+getEvent (EventParsers parsers) = do
+  etRef <- get :: Get EventTypeNum
+  if etRef == EVENT_DATA_END
+     then return Nothing
+     else do !evTime   <- get
+             evSpec <- parsers ! fromIntegral etRef
+             return $ Just Event { evCap = undefined, .. }
+
+--
+-- standardEventParsers.
+--
+standardParsers :: [EventParser EventInfo]
+standardParsers = [
+ (FixedSizeParser EVENT_STARTUP sz_cap (do -- (n_caps)
+      c <- get :: Get CapNo
+      return Startup{ n_caps = fromIntegral c }
+   )),
+
+ (FixedSizeParser EVENT_BLOCK_MARKER (sz_block_size + sz_time + sz_cap) (do -- (size, end_time, cap)
+      block_size <- get :: Get BlockSize
+      end_time <- get :: Get Timestamp
+      c <- get :: Get CapNo
+      return EventBlock { end_time   = end_time,
+                          cap        = fromIntegral c,
+                          block_size = ((fromIntegral block_size) -
+                                        (fromIntegral sz_block_event))
+                        }
+   )),
+
+ -- EVENT_SHUTDOWN is replaced by EVENT_CAP_DELETE and GHC 7.6+
+ -- no longer generate the event; should be removed at some point
+ (simpleEvent EVENT_SHUTDOWN Shutdown),
+
+ (simpleEvent EVENT_REQUEST_SEQ_GC RequestSeqGC),
+
+ (simpleEvent EVENT_REQUEST_PAR_GC RequestParGC),
+
+ (simpleEvent EVENT_GC_START StartGC),
+
+ (simpleEvent EVENT_GC_WORK GCWork),
+
+ (simpleEvent EVENT_GC_IDLE GCIdle),
+
+ (simpleEvent EVENT_GC_DONE GCDone),
+
+ (simpleEvent EVENT_GC_END EndGC),
+
+ (simpleEvent EVENT_GC_GLOBAL_SYNC GlobalSyncGC),
+
+ (FixedSizeParser EVENT_GC_STATS_GHC (sz_capset + 2 + 5*8 + 4) (do  -- (heap_capset, generation, copied_bytes, slop_bytes, frag_bytes, par_n_threads, par_max_copied, par_tot_copied)
+      heapCapset   <- get
+      gen          <- get :: Get Word16
+      copied       <- get :: Get Word64
+      slop         <- get :: Get Word64
+      frag         <- get :: Get Word64
+      parNThreads  <- get :: Get Word32
+      parMaxCopied <- get :: Get Word64
+      parTotCopied <- get :: Get Word64
+      return GCStatsGHC{ gen = fromIntegral gen
+                       , parNThreads = fromIntegral parNThreads
+                       , ..}
+ )),
+
+ (FixedSizeParser EVENT_HEAP_ALLOCATED (sz_capset + 8) (do  -- (heap_capset, alloc_bytes)
+      heapCapset <- get
+      allocBytes <- get
+      return HeapAllocated{..}
+ )),
+
+ (FixedSizeParser EVENT_HEAP_SIZE (sz_capset + 8) (do  -- (heap_capset, size_bytes)
+      heapCapset <- get
+      sizeBytes  <- get
+      return HeapSize{..}
+ )),
+
+ (FixedSizeParser EVENT_HEAP_LIVE (sz_capset + 8) (do  -- (heap_capset, live_bytes)
+      heapCapset <- get
+      liveBytes  <- get
+      return HeapLive{..}
+ )),
+
+ (FixedSizeParser EVENT_HEAP_INFO_GHC (sz_capset + 2 + 4*8) (do  -- (heap_capset, n_generations, max_heap_size, alloc_area_size, mblock_size, block_size)
+      heapCapset    <- get
+      gens          <- get :: Get Word16
+      maxHeapSize   <- get :: Get Word64
+      allocAreaSize <- get :: Get Word64
+      mblockSize    <- get :: Get Word64
+      blockSize     <- get :: Get Word64
+      return HeapInfoGHC{gens = fromIntegral gens, ..}
+ )),
+
+ (FixedSizeParser EVENT_CAP_CREATE (sz_cap) (do  -- (cap)
+      cap <- get :: Get CapNo
+      return CapCreate{cap = fromIntegral cap}
+ )),
+
+ (FixedSizeParser EVENT_CAP_DELETE (sz_cap) (do  -- (cap)
+      cap <- get :: Get CapNo
+      return CapDelete{cap = fromIntegral cap}
+ )),
+
+ (FixedSizeParser EVENT_CAP_DISABLE (sz_cap) (do  -- (cap)
+      cap <- get :: Get CapNo
+      return CapDisable{cap = fromIntegral cap}
+ )),
+
+ (FixedSizeParser EVENT_CAP_ENABLE (sz_cap) (do  -- (cap)
+      cap <- get :: Get CapNo
+      return CapEnable{cap = fromIntegral cap}
+ )),
+
+ (FixedSizeParser EVENT_CAPSET_CREATE (sz_capset + sz_capset_type) (do -- (capset, capset_type)
+      cs <- get
+      ct <- fmap mkCapsetType get
+      return CapsetCreate{capset=cs,capsetType=ct}
+   )),
+
+ (FixedSizeParser EVENT_CAPSET_DELETE sz_capset (do -- (capset)
+      cs <- get
+      return CapsetDelete{capset=cs}
+   )),
+
+ (FixedSizeParser EVENT_CAPSET_ASSIGN_CAP (sz_capset + sz_cap) (do -- (capset, cap)
+      cs <- get
+      cp <- get :: Get CapNo
+      return CapsetAssignCap{capset=cs,cap=fromIntegral cp}
+   )),
+
+ (FixedSizeParser EVENT_CAPSET_REMOVE_CAP (sz_capset + sz_cap) (do -- (capset, cap)
+      cs <- get
+      cp <- get :: Get CapNo
+      return CapsetRemoveCap{capset=cs,cap=fromIntegral cp}
+   )),
+
+ (FixedSizeParser EVENT_OSPROCESS_PID (sz_capset + sz_pid) (do -- (capset, pid)
+      cs <- get
+      pd <- get
+      return OsProcessPid{capset=cs,pid=pd}
+   )),
+
+ (FixedSizeParser EVENT_OSPROCESS_PPID (sz_capset + sz_pid) (do -- (capset, ppid)
+      cs <- get
+      pd <- get
+      return OsProcessParentPid{capset=cs,ppid=pd}
+  )),
+
+ (FixedSizeParser EVENT_WALL_CLOCK_TIME (sz_capset + 8 + 4) (do -- (capset, unix_epoch_seconds, nanoseconds)
+      cs <- get
+      s  <- get
+      ns <- get
+      return WallClockTime{capset=cs,sec=s,nsec=ns}
+  )),
+
+ (VariableSizeParser EVENT_LOG_MSG (do -- (msg)
+      num <- get :: Get Word16
+      string <- getString num
+      return Message{ msg = string }
+   )),
+ (VariableSizeParser EVENT_USER_MSG (do -- (msg)
+      num <- get :: Get Word16
+      string <- getString num
+      return UserMessage{ msg = string }
+   )),
+    (VariableSizeParser EVENT_USER_MARKER (do -- (markername)
+      num <- get :: Get Word16
+      string <- getString num
+      return UserMarker{ markername = string }
+   )),
+ (VariableSizeParser EVENT_PROGRAM_ARGS (do -- (capset, [arg])
+      num <- get :: Get Word16
+      cs <- get
+      string <- getString (num - sz_capset)
+      return ProgramArgs{ capset = cs
+                        , args = splitNull string }
+   )),
+ (VariableSizeParser EVENT_PROGRAM_ENV (do -- (capset, [arg])
+      num <- get :: Get Word16
+      cs <- get
+      string <- getString (num - sz_capset)
+      return ProgramEnv{ capset = cs
+                       , env = splitNull string }
+   )),
+ (VariableSizeParser EVENT_RTS_IDENTIFIER (do -- (capset, str)
+      num <- get :: Get Word16
+      cs <- get
+      string <- getString (num - sz_capset)
+      return RtsIdentifier{ capset = cs
+                          , rtsident = string }
+   )),
+
+ (VariableSizeParser EVENT_INTERN_STRING (do -- (str, id)
+      num <- get :: Get Word16
+      string <- getString (num - sz_string_id)
+      sId <- get :: Get StringId
+      return (InternString string sId)
+    )),
+
+ (VariableSizeParser EVENT_THREAD_LABEL (do -- (thread, str)
+      num <- get :: Get Word16
+      tid <- get
+      str <- getString (num - sz_tid)
+      return ThreadLabel{ thread      = tid
+                        , threadlabel = str }
+    ))
+ ]
+
+-- Parsers valid for GHC7 but not GHC6.
+ghc7Parsers :: [EventParser EventInfo]
+ghc7Parsers = [
+ (FixedSizeParser EVENT_CREATE_THREAD sz_tid (do  -- (thread)
+      t <- get
+      return CreateThread{thread=t}
+   )),
+
+ (FixedSizeParser EVENT_RUN_THREAD sz_tid (do  --  (thread)
+      t <- get
+      return RunThread{thread=t}
+   )),
+
+ (FixedSizeParser EVENT_THREAD_RUNNABLE sz_tid (do  -- (thread)
+      t <- get
+      return ThreadRunnable{thread=t}
+   )),
+
+ (FixedSizeParser EVENT_MIGRATE_THREAD (sz_tid + sz_cap) (do  --  (thread, newCap)
+      t  <- get
+      nc <- get :: Get CapNo
+      return MigrateThread{thread=t,newCap=fromIntegral nc}
+   )),
+
+ -- Yes, EVENT_RUN/STEAL_SPARK are deprecated, but see the explanation in the
+ -- 'ghc6Parsers' section below. Since we're parsing them anyway, we might
+ -- as well convert them to the new SparkRun/SparkSteal events.
+ (FixedSizeParser EVENT_RUN_SPARK sz_tid (do  -- (thread)
+      _ <- get :: Get ThreadId
+      return SparkRun
+   )),
+
+ (FixedSizeParser EVENT_STEAL_SPARK (sz_tid + sz_cap) (do  -- (thread, victimCap)
+      _  <- get :: Get ThreadId
+      vc <- get :: Get CapNo
+      return SparkSteal{victimCap=fromIntegral vc}
+   )),
+
+ (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_tid (do  -- (sparkThread)
+      st <- get :: Get ThreadId
+      return CreateSparkThread{sparkThread=st}
+   )),
+
+ (FixedSizeParser EVENT_SPARK_COUNTERS (7*8) (do -- (crt,dud,ovf,cnv,gcd,fiz,rem)
+      crt <- get :: Get Word64
+      dud <- get :: Get Word64
+      ovf <- get :: Get Word64
+      cnv <- get :: Get Word64
+      gcd <- get :: Get Word64
+      fiz <- get :: Get Word64
+      rem <- get :: Get Word64
+      return SparkCounters{sparksCreated    = crt, sparksDud       = dud,
+                           sparksOverflowed = ovf, sparksConverted = cnv,
+                           -- Warning: order of fiz and gcd reversed!
+                           sparksFizzled    = fiz, sparksGCd       = gcd,
+                           sparksRemaining  = rem}
+   )),
+
+ (simpleEvent EVENT_SPARK_CREATE   SparkCreate),
+ (simpleEvent EVENT_SPARK_DUD      SparkDud),
+ (simpleEvent EVENT_SPARK_OVERFLOW SparkOverflow),
+ (simpleEvent EVENT_SPARK_RUN      SparkRun),
+ (FixedSizeParser EVENT_SPARK_STEAL sz_cap (do  -- (victimCap)
+      vc <- get :: Get CapNo
+      return SparkSteal{victimCap=fromIntegral vc}
+   )),
+ (simpleEvent EVENT_SPARK_FIZZLE   SparkFizzle),
+ (simpleEvent EVENT_SPARK_GC       SparkGC),
+
+ (FixedSizeParser EVENT_TASK_CREATE (sz_taskid + sz_cap + sz_kernel_tid) (do  -- (taskID, cap, tid)
+      taskId <- get :: Get TaskId
+      cap    <- get :: Get CapNo
+      tid    <- get :: Get KernelThreadId
+      return TaskCreate{ taskId, cap = fromIntegral cap, tid }
+   )),
+ (FixedSizeParser EVENT_TASK_MIGRATE (sz_taskid + sz_cap*2) (do  -- (taskID, cap, new_cap)
+      taskId  <- get :: Get TaskId
+      cap     <- get :: Get CapNo
+      new_cap <- get :: Get CapNo
+      return TaskMigrate{ taskId, cap = fromIntegral cap
+                                , new_cap = fromIntegral new_cap
+                        }
+   )),
+ (FixedSizeParser EVENT_TASK_DELETE (sz_taskid) (do  -- (taskID)
+      taskId <- get :: Get TaskId
+      return TaskDelete{ taskId }
+   )),
+
+ (FixedSizeParser EVENT_THREAD_WAKEUP (sz_tid + sz_cap) (do  -- (thread, other_cap)
+      t <- get
+      oc <- get :: Get CapNo
+      return WakeupThread{thread=t,otherCap=fromIntegral oc}
+   ))
+ ]
+
+-- special thread stop event parsers for GHC version 7.8.2
+-- see [Stop status in GHC-7.8.2] in EventTypes.hs
+ghc782StopParser :: EventParser EventInfo
+ghc782StopParser =
+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid) (do
+      -- (thread, status, info)
+      t <- get
+      s <- get :: Get RawThreadStopStatus
+      i <- get :: Get ThreadId
+      return StopThread{thread = t,
+                        status = case () of
+                                  _ | s > maxThreadStopStatus782
+                                    -> NoStatus
+                                    | s == 9 {- XXX yeuch -}
+                                      -- GHC-7.8.2: 9 == BlockedOnBlackHole
+                                    -> BlockedOnBlackHoleOwnedBy i
+                                    | otherwise
+                                    -> mkStopStatus782 s}
+   ))
+
+-- parsers for GHC < 7.8.2. Older versions do not use block info
+-- (different length).  See [Stop status in GHC-7.8.2] in
+-- EventTypes.hs
+pre77StopParsers :: [EventParser EventInfo]
+pre77StopParsers = [
+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status) (do
+      -- (thread, status)
+      t <- get
+      s <- get :: Get RawThreadStopStatus
+      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77
+                                              then NoStatus
+                                              else mkStopStatus s}
+                        -- older version of the event, no block info
+   )),
+
+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid)
+    (do
+      -- (thread, status, info)
+      t <- get
+      s <- get :: Get RawThreadStopStatus
+      i <- get :: Get ThreadId
+      return StopThread{thread = t,
+                        status = case () of
+                                  _ | s > maxThreadStopStatusPre77
+                                    -> NoStatus
+                                    | s == 8 {- XXX yeuch -}
+                                      -- pre-7.7: 8==BlockedOnBlackhole
+                                    -> BlockedOnBlackHoleOwnedBy i
+                                    | otherwise
+                                    -> mkStopStatus s}
+    ))
+  ]
+
+-- parsers for GHC >= 7.8.3, always using block info field parser.
+-- See [Stop status in GHC-7.8.2] in EventTypes.hs
+post782StopParser :: EventParser EventInfo
+post782StopParser =
+ (FixedSizeParser EVENT_STOP_THREAD (sz_tid + sz_th_stop_status + sz_tid)
+    (do
+      -- (thread, status, info)
+      t <- get
+      s <- get :: Get RawThreadStopStatus
+      i <- get :: Get ThreadId
+      return StopThread{thread = t,
+                        status = case () of
+                                  _ | s > maxThreadStopStatus
+                                    -> NoStatus
+                                    | s == 8 {- XXX yeuch -}
+                                      -- post-7.8.2: 8==BlockedOnBlackhole
+                                    -> BlockedOnBlackHoleOwnedBy i
+                                    | otherwise
+                                    -> mkStopStatus s}
+    ))
+
+ -----------------------
+ -- GHC 6.12 compat: GHC 6.12 reported the wrong sizes for some events,
+ -- so we have to recognise those wrong sizes here for backwards
+ -- compatibility.
+ghc6Parsers :: [EventParser EventInfo]
+ghc6Parsers = [
+ (FixedSizeParser EVENT_STARTUP 0 (do
+      -- BUG in GHC 6.12: the startup event was incorrectly
+      -- declared as size 0, so we accept it here.
+      c <- get :: Get CapNo
+      return Startup{ n_caps = fromIntegral c }
+   )),
+
+ (FixedSizeParser EVENT_CREATE_THREAD sz_old_tid (do  -- (thread)
+      t <- get
+      return CreateThread{thread=t}
+   )),
+
+ (FixedSizeParser EVENT_RUN_THREAD sz_old_tid (do  --  (thread)
+      t <- get
+      return RunThread{thread=t}
+   )),
+
+ (FixedSizeParser EVENT_STOP_THREAD (sz_old_tid + 2) (do  -- (thread, status)
+      t <- get
+      s <- get :: Get RawThreadStopStatus
+      return StopThread{thread=t, status = if s > maxThreadStopStatusPre77
+                                              then NoStatus
+                                              else mkStopStatus s}
+                        -- older version of the event uses pre-77 encoding
+                        -- (actually, it only uses encodings 0 to 5)
+                        -- see [Stop status in GHC-7.8.2] in EventTypes.hs
+   )),
+
+ (FixedSizeParser EVENT_THREAD_RUNNABLE sz_old_tid (do  -- (thread)
+      t <- get
+      return ThreadRunnable{thread=t}
+   )),
+
+ (FixedSizeParser EVENT_MIGRATE_THREAD (sz_old_tid + sz_cap) (do  --  (thread, newCap)
+      t  <- get
+      nc <- get :: Get CapNo
+      return MigrateThread{thread=t,newCap=fromIntegral nc}
+   )),
+
+ -- Note: it is vital that these two (EVENT_RUN/STEAL_SPARK) remain here (at
+ -- least in the ghc6Parsers section) even though both events are deprecated.
+ -- The reason is that .eventlog files created by the buggy GHC-6.12
+ -- mis-declare the size of these two events. So we have to handle them
+ -- specially here otherwise we'll get the wrong size, leading to us getting
+ -- out of sync and eventual parse failure. Since we're parsing them anyway,
+ -- we might as well convert them to the new SparkRun/SparkSteal events.
+ (FixedSizeParser EVENT_RUN_SPARK sz_old_tid (do  -- (thread)
+      _ <- get :: Get ThreadId
+      return SparkRun
+   )),
+
+ (FixedSizeParser EVENT_STEAL_SPARK (sz_old_tid + sz_cap) (do  -- (thread, victimCap)
+      _  <- get :: Get ThreadId
+      vc <- get :: Get CapNo
+      return SparkSteal{victimCap=fromIntegral vc}
+   )),
+
+ (FixedSizeParser EVENT_CREATE_SPARK_THREAD sz_old_tid (do  -- (sparkThread)
+      st <- get :: Get ThreadId
+      return CreateSparkThread{sparkThread=st}
+   )),
+
+ (FixedSizeParser EVENT_THREAD_WAKEUP (sz_old_tid + sz_cap) (do  -- (thread, other_cap)
+      t <- get
+      oc <- get :: Get CapNo
+      return WakeupThread{thread=t,otherCap=fromIntegral oc}
+   ))
+ ]
+
+-- Parsers for parallel events. Parameter is the thread_id size, to create
+-- ghc6-parsers (using the wrong size) where necessary.
+parRTSParsers :: EventTypeSize -> [EventParser EventInfo]
+parRTSParsers sz_tid' = [
+ (VariableSizeParser EVENT_VERSION (do -- (version)
+      num <- get :: Get Word16
+      string <- getString num
+      return Version{ version = string }
+   )),
+
+ (VariableSizeParser EVENT_PROGRAM_INVOCATION (do -- (cmd. line)
+      num <- get :: Get Word16
+      string <- getString num
+      return ProgramInvocation{ commandline = string }
+   )),
+
+ (simpleEvent EVENT_EDEN_START_RECEIVE EdenStartReceive),
+ (simpleEvent EVENT_EDEN_END_RECEIVE   EdenEndReceive),
+
+ (FixedSizeParser EVENT_CREATE_PROCESS sz_procid
+    (do p <- get
+        return CreateProcess{ process = p })
+ ),
+
+ (FixedSizeParser EVENT_KILL_PROCESS sz_procid
+    (do p <- get
+        return KillProcess{ process = p })
+ ),
+
+ (FixedSizeParser EVENT_ASSIGN_THREAD_TO_PROCESS (sz_tid' + sz_procid)
+    (do t <- get
+        p <- get
+        return AssignThreadToProcess { thread = t, process = p })
+ ),
+
+ (FixedSizeParser EVENT_CREATE_MACHINE (sz_mid + sz_realtime)
+    (do m <- get
+        t <- get
+        return CreateMachine { machine = m, realtime = t })
+ ),
+
+ (FixedSizeParser EVENT_KILL_MACHINE sz_mid
+    (do m <- get :: Get MachineId
+        return KillMachine { machine = m })
+ ),
+
+ (FixedSizeParser EVENT_SEND_MESSAGE
+    (sz_msgtag + 2*sz_procid + 2*sz_tid' + sz_mid)
+    (do tag <- get :: Get RawMsgTag
+        sP  <- get :: Get ProcessId
+        sT  <- get :: Get ThreadId
+        rM  <- get :: Get MachineId
+        rP  <- get :: Get ProcessId
+        rIP <- get :: Get PortId
+        return SendMessage { mesTag = toMsgTag tag,
+                             senderProcess = sP,
+                             senderThread = sT,
+                             receiverMachine = rM,
+                             receiverProcess = rP,
+                             receiverInport = rIP
+                           })
+ ),
+
+ (FixedSizeParser EVENT_RECEIVE_MESSAGE
+    (sz_msgtag + 2*sz_procid + 2*sz_tid' + sz_mid + sz_mes)
+    (do tag <- get :: Get Word8
+        rP  <- get :: Get ProcessId
+        rIP <- get :: Get PortId
+        sM  <- get :: Get MachineId
+        sP  <- get :: Get ProcessId
+        sT  <- get :: Get ThreadId
+        mS  <- get :: Get MessageSize
+        return  ReceiveMessage { mesTag = toMsgTag tag,
+                                 receiverProcess = rP,
+                                 receiverInport = rIP,
+                                 senderMachine = sM,
+                                 senderProcess = sP,
+                                 senderThread= sT,
+                                 messageSize = mS
+                               })
+ ),
+
+ (FixedSizeParser EVENT_SEND_RECEIVE_LOCAL_MESSAGE
+    (sz_msgtag + 2*sz_procid + 2*sz_tid')
+    (do tag <- get :: Get Word8
+        sP  <- get :: Get ProcessId
+        sT  <- get :: Get ThreadId
+        rP  <- get :: Get ProcessId
+        rIP <- get :: Get PortId
+        return SendReceiveLocalMessage { mesTag = toMsgTag tag,
+                                         senderProcess = sP,
+                                         senderThread = sT,
+                                         receiverProcess = rP,
+                                         receiverInport = rIP
+                                       })
+ )]
+
+mercuryParsers :: [EventParser EventInfo]
+mercuryParsers = [
+ (FixedSizeParser EVENT_MER_START_PAR_CONJUNCTION
+    (sz_par_conj_dyn_id + sz_par_conj_static_id)
+    (do dyn_id <- get
+        static_id <- get
+        return (MerStartParConjunction dyn_id static_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCTION sz_par_conj_dyn_id
+    (do dyn_id <- get
+        return (MerEndParConjunction dyn_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_STOP_PAR_CONJUNCT sz_par_conj_dyn_id
+    (do dyn_id <- get
+        return (MerEndParConjunct dyn_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_CREATE_SPARK (sz_par_conj_dyn_id + sz_spark_id)
+    (do dyn_id <- get
+        spark_id <- get
+        return (MerCreateSpark dyn_id spark_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_FUT_CREATE (sz_future_id + sz_string_id)
+    (do future_id <- get
+        name_id <- get
+        return (MerFutureCreate future_id name_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_FUT_WAIT_NOSUSPEND (sz_future_id)
+    (do future_id <- get
+        return (MerFutureWaitNosuspend future_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_FUT_WAIT_SUSPENDED (sz_future_id)
+    (do future_id <- get
+        return (MerFutureWaitSuspended future_id))
+ ),
+
+ (FixedSizeParser EVENT_MER_FUT_SIGNAL (sz_future_id)
+    (do future_id <- get
+        return (MerFutureSignal future_id))
+ ),
+
+ (simpleEvent EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT MerLookingForGlobalThread),
+ (simpleEvent EVENT_MER_WORK_STEALING MerWorkStealing),
+ (simpleEvent EVENT_MER_LOOKING_FOR_LOCAL_SPARK MerLookingForLocalSpark),
+
+ (FixedSizeParser EVENT_MER_RELEASE_CONTEXT sz_tid
+    (do thread_id <- get
+        return (MerReleaseThread thread_id))
+ ),
+
+ (simpleEvent EVENT_MER_ENGINE_SLEEPING MerCapSleeping),
+ (simpleEvent EVENT_MER_CALLING_MAIN MerCallingMain)
+
+ ]
+
+perfParsers :: [EventParser EventInfo]
+perfParsers = [
+ (VariableSizeParser EVENT_PERF_NAME (do -- (perf_num, name)
+      num     <- get :: Get Word16
+      perfNum <- get
+      name    <- getString (num - sz_perf_num)
+      return PerfName{perfNum, name}
+   )),
+
+ (FixedSizeParser EVENT_PERF_COUNTER (sz_perf_num + sz_kernel_tid + 8) (do -- (perf_num, tid, period)
+      perfNum <- get
+      tid     <- get
+      period  <- get
+      return PerfCounter{perfNum, tid, period}
+  )),
+
+ (FixedSizeParser EVENT_PERF_TRACEPOINT (sz_perf_num + sz_kernel_tid) (do -- (perf_num, tid)
+      perfNum <- get
+      tid     <- get
+      return PerfTracepoint{perfNum, tid}
+  ))
+ ]
+
+-----------------------------------------------------------
+
+putE :: Binary a => a -> PutM ()
+putE = put
+
+putType :: EventTypeNum -> PutM ()
+putType = putE
+
+putCap :: Int -> PutM ()
+putCap c = putE (fromIntegral c :: CapNo)
+
+putMarker :: Word32 -> PutM ()
+putMarker = putE
+
+putEStr :: String -> PutM ()
+putEStr = mapM_ putE
+
+putEventLog :: EventLog -> PutM ()
+putEventLog (EventLog hdr es) = do
+    putHeader hdr
+    putData es
+
+putHeader :: Header -> PutM ()
+putHeader (Header ets) = do
+    putMarker EVENT_HEADER_BEGIN
+    putMarker EVENT_HET_BEGIN
+    mapM_ putEventType ets
+    putMarker EVENT_HET_END
+    putMarker EVENT_HEADER_END
+ where
+    putEventType (EventType n d msz) = do
+        putMarker EVENT_ET_BEGIN
+        putType n
+        putE $ fromMaybe 0xffff msz
+        putE (fromIntegral $ length d :: EventTypeDescLen)
+        mapM_ put d
+        -- the event type header allows for extra data, which we don't use:
+        putE (0 :: Word32)
+        putMarker EVENT_ET_END
+
+putData :: Data -> PutM ()
+putData (Data es) = do
+    putMarker EVENT_DATA_BEGIN -- Word32
+    mapM_ putEvent es
+    putType EVENT_DATA_END -- Word16
+
+eventTypeNum :: EventInfo -> EventTypeNum
+eventTypeNum e = case e of
+    CreateThread {} -> EVENT_CREATE_THREAD
+    RunThread {} -> EVENT_RUN_THREAD
+    StopThread {} -> EVENT_STOP_THREAD
+    ThreadRunnable {} -> EVENT_THREAD_RUNNABLE
+    MigrateThread {} -> EVENT_MIGRATE_THREAD
+    Shutdown {} -> EVENT_SHUTDOWN
+    WakeupThread {} -> EVENT_THREAD_WAKEUP
+    ThreadLabel {}  -> EVENT_THREAD_LABEL
+    StartGC {} -> EVENT_GC_START
+    EndGC {} -> EVENT_GC_END
+    GlobalSyncGC {} -> EVENT_GC_GLOBAL_SYNC
+    RequestSeqGC {} -> EVENT_REQUEST_SEQ_GC
+    RequestParGC {} -> EVENT_REQUEST_PAR_GC
+    CreateSparkThread {} -> EVENT_CREATE_SPARK_THREAD
+    SparkCounters {} -> EVENT_SPARK_COUNTERS
+    SparkCreate   {} -> EVENT_SPARK_CREATE
+    SparkDud      {} -> EVENT_SPARK_DUD
+    SparkOverflow {} -> EVENT_SPARK_OVERFLOW
+    SparkRun      {} -> EVENT_SPARK_RUN
+    SparkSteal    {} -> EVENT_SPARK_STEAL
+    SparkFizzle   {} -> EVENT_SPARK_FIZZLE
+    SparkGC       {} -> EVENT_SPARK_GC
+    TaskCreate  {} -> EVENT_TASK_CREATE
+    TaskMigrate {} -> EVENT_TASK_MIGRATE
+    TaskDelete  {} -> EVENT_TASK_DELETE
+    Message {} -> EVENT_LOG_MSG
+    Startup {} -> EVENT_STARTUP
+    EventBlock {} -> EVENT_BLOCK_MARKER
+    UserMessage {} -> EVENT_USER_MSG
+    UserMarker  {} -> EVENT_USER_MARKER
+    GCIdle {} -> EVENT_GC_IDLE
+    GCWork {} -> EVENT_GC_WORK
+    GCDone {} -> EVENT_GC_DONE
+    GCStatsGHC{} -> EVENT_GC_STATS_GHC
+    HeapAllocated{} -> EVENT_HEAP_ALLOCATED
+    HeapSize{} -> EVENT_HEAP_SIZE
+    HeapLive{} -> EVENT_HEAP_LIVE
+    HeapInfoGHC{} -> EVENT_HEAP_INFO_GHC
+    CapCreate{} -> EVENT_CAP_CREATE
+    CapDelete{} -> EVENT_CAP_DELETE
+    CapDisable{} -> EVENT_CAP_DISABLE
+    CapEnable{} -> EVENT_CAP_ENABLE
+    CapsetCreate {} -> EVENT_CAPSET_CREATE
+    CapsetDelete {} -> EVENT_CAPSET_DELETE
+    CapsetAssignCap {} -> EVENT_CAPSET_ASSIGN_CAP
+    CapsetRemoveCap {} -> EVENT_CAPSET_REMOVE_CAP
+    RtsIdentifier {} -> EVENT_RTS_IDENTIFIER
+    ProgramArgs {} -> EVENT_PROGRAM_ARGS
+    ProgramEnv {} -> EVENT_PROGRAM_ENV
+    OsProcessPid {} -> EVENT_OSPROCESS_PID
+    OsProcessParentPid{} -> EVENT_OSPROCESS_PPID
+    WallClockTime{} -> EVENT_WALL_CLOCK_TIME
+    UnknownEvent {} -> error "eventTypeNum UnknownEvent"
+    InternString {} -> EVENT_INTERN_STRING
+    Version {} -> EVENT_VERSION
+    ProgramInvocation {} -> EVENT_PROGRAM_INVOCATION
+    EdenStartReceive {} -> EVENT_EDEN_START_RECEIVE
+    EdenEndReceive {} -> EVENT_EDEN_END_RECEIVE
+    CreateProcess {} -> EVENT_CREATE_PROCESS
+    KillProcess {} -> EVENT_KILL_PROCESS
+    AssignThreadToProcess {} -> EVENT_ASSIGN_THREAD_TO_PROCESS
+    CreateMachine {} -> EVENT_CREATE_MACHINE
+    KillMachine {} -> EVENT_KILL_MACHINE
+    SendMessage {} -> EVENT_SEND_MESSAGE
+    ReceiveMessage {} -> EVENT_RECEIVE_MESSAGE
+    SendReceiveLocalMessage {} -> EVENT_SEND_RECEIVE_LOCAL_MESSAGE
+    MerStartParConjunction {} -> EVENT_MER_START_PAR_CONJUNCTION
+    MerEndParConjunction _ -> EVENT_MER_STOP_PAR_CONJUNCTION
+    MerEndParConjunct _ -> EVENT_MER_STOP_PAR_CONJUNCT
+    MerCreateSpark {} -> EVENT_MER_CREATE_SPARK
+    MerFutureCreate {} -> EVENT_MER_FUT_CREATE
+    MerFutureWaitNosuspend _ -> EVENT_MER_FUT_WAIT_NOSUSPEND
+    MerFutureWaitSuspended _ -> EVENT_MER_FUT_WAIT_SUSPENDED
+    MerFutureSignal _ -> EVENT_MER_FUT_SIGNAL
+    MerLookingForGlobalThread -> EVENT_MER_LOOKING_FOR_GLOBAL_CONTEXT
+    MerWorkStealing -> EVENT_MER_WORK_STEALING
+    MerLookingForLocalSpark -> EVENT_MER_LOOKING_FOR_LOCAL_SPARK
+    MerReleaseThread _ -> EVENT_MER_RELEASE_CONTEXT
+    MerCapSleeping -> EVENT_MER_ENGINE_SLEEPING
+    MerCallingMain -> EVENT_MER_CALLING_MAIN
+    PerfName       {} -> nEVENT_PERF_NAME
+    PerfCounter    {} -> nEVENT_PERF_COUNTER
+    PerfTracepoint {} -> nEVENT_PERF_TRACEPOINT
+
+nEVENT_PERF_NAME, nEVENT_PERF_COUNTER, nEVENT_PERF_TRACEPOINT :: EventTypeNum
+nEVENT_PERF_NAME = EVENT_PERF_NAME
+nEVENT_PERF_COUNTER = EVENT_PERF_COUNTER
+nEVENT_PERF_TRACEPOINT = EVENT_PERF_TRACEPOINT
+
+putEvent :: Event -> PutM ()
+putEvent Event {..} = do
+    putType (eventTypeNum evSpec)
+    put evTime
+    putEventSpec evSpec
+
+putEventSpec :: EventInfo -> PutM ()
+putEventSpec (Startup caps) = do
+    putCap (fromIntegral caps)
+
+putEventSpec (EventBlock end cap sz) = do
+    putE (fromIntegral (sz+24) :: BlockSize)
+    putE end
+    putE (fromIntegral cap :: CapNo)
+
+putEventSpec (CreateThread t) =
+    putE t
+
+putEventSpec (RunThread t) =
+    putE t
+
+-- here we assume that ThreadStopStatus fromEnum matches the definitions in
+-- EventLogFormat.h
+-- The standard encoding is used here, which is wrong for eventlogs
+-- produced by GHC-7.8.2 ([Stop status in GHC-7.8.2] in EventTypes.hs
+putEventSpec (StopThread t s) = do
+    putE t
+    putE $ case s of
+            NoStatus -> 0 :: Word16
+            HeapOverflow -> 1
+            StackOverflow -> 2
+            ThreadYielding -> 3
+            ThreadBlocked -> 4
+            ThreadFinished -> 5
+            ForeignCall -> 6
+            BlockedOnMVar -> 7
+            BlockedOnMVarRead -> 20 -- since GHC-7.8.3
+            BlockedOnBlackHole -> 8
+            BlockedOnBlackHoleOwnedBy _ -> 8
+            BlockedOnRead -> 9
+            BlockedOnWrite -> 10
+            BlockedOnDelay -> 11
+            BlockedOnSTM -> 12
+            BlockedOnDoProc -> 13
+            BlockedOnCCall -> 14
+            BlockedOnCCall_NoUnblockExc -> 15
+            BlockedOnMsgThrowTo -> 16
+            ThreadMigrating -> 17
+            BlockedOnMsgGlobalise -> 18
+    putE $ case s of
+            BlockedOnBlackHoleOwnedBy i -> i
+            _                           -> 0
+
+putEventSpec (ThreadRunnable t) =
+    putE t
+
+putEventSpec (MigrateThread t c) = do
+    putE t
+    putCap c
+
+putEventSpec (CreateSparkThread t) =
+    putE t
+
+putEventSpec (SparkCounters crt dud ovf cnv fiz gcd rem) = do
+    putE crt
+    putE dud
+    putE ovf
+    putE cnv
+    -- Warning: order of fiz and gcd reversed!
+    putE gcd
+    putE fiz
+    putE rem
+
+putEventSpec SparkCreate =
+    return ()
+
+putEventSpec SparkDud =
+    return ()
+
+putEventSpec SparkOverflow =
+    return ()
+
+putEventSpec SparkRun =
+    return ()
+
+putEventSpec (SparkSteal c) =
+    putCap c
+
+putEventSpec SparkFizzle =
+    return ()
+
+putEventSpec SparkGC =
+    return ()
+
+putEventSpec (WakeupThread t c) = do
+    putE t
+    putCap c
+
+putEventSpec (ThreadLabel t l) = do
+    putE (fromIntegral (length l) + sz_tid :: Word16)
+    putE t
+    putEStr l
+
+putEventSpec Shutdown =
+    return ()
+
+putEventSpec RequestSeqGC =
+    return ()
+
+putEventSpec RequestParGC =
+    return ()
+
+putEventSpec StartGC =
+    return ()
+
+putEventSpec GCWork =
+    return ()
+
+putEventSpec GCIdle =
+    return ()
+
+putEventSpec GCDone =
+    return ()
+
+putEventSpec EndGC =
+    return ()
+
+putEventSpec GlobalSyncGC =
+    return ()
+
+putEventSpec (TaskCreate taskId cap tid) = do
+    putE taskId
+    putCap cap
+    putE tid
+
+putEventSpec (TaskMigrate taskId cap new_cap) = do
+    putE taskId
+    putCap cap
+    putCap new_cap
+
+putEventSpec (TaskDelete taskId) =
+    putE taskId
+
+putEventSpec GCStatsGHC{..} = do
+    putE heapCapset
+    putE (fromIntegral gen :: Word16)
+    putE copied
+    putE slop
+    putE frag
+    putE (fromIntegral parNThreads :: Word32)
+    putE parMaxCopied
+    putE parTotCopied
+
+putEventSpec HeapAllocated{..} = do
+    putE heapCapset
+    putE allocBytes
+
+putEventSpec HeapSize{..} = do
+    putE heapCapset
+    putE sizeBytes
+
+putEventSpec HeapLive{..} = do
+    putE heapCapset
+    putE liveBytes
+
+putEventSpec HeapInfoGHC{..} = do
+    putE heapCapset
+    putE (fromIntegral gens :: Word16)
+    putE maxHeapSize
+    putE allocAreaSize
+    putE mblockSize
+    putE blockSize
+
+putEventSpec CapCreate{cap} =
+    putCap cap
+
+putEventSpec CapDelete{cap} =
+    putCap cap
+
+putEventSpec CapDisable{cap} =
+    putCap cap
+
+putEventSpec CapEnable{cap} =
+    putCap cap
+
+putEventSpec (CapsetCreate cs ct) = do
+    putE cs
+    putE $ case ct of
+            CapsetCustom -> 1 :: Word16
+            CapsetOsProcess -> 2
+            CapsetClockDomain -> 3
+            CapsetUnknown -> 0
+
+putEventSpec (CapsetDelete cs) =
+    putE cs
+
+putEventSpec (CapsetAssignCap cs cp) = do
+    putE cs
+    putCap cp
+
+putEventSpec (CapsetRemoveCap cs cp) = do
+    putE cs
+    putCap cp
+
+putEventSpec (RtsIdentifier cs rts) = do
+    putE (fromIntegral (length rts) + sz_capset :: Word16)
+    putE cs
+    putEStr rts
+
+putEventSpec (ProgramArgs cs as) = do
+    let as' = unsep as
+    putE (fromIntegral (length as') + sz_capset :: Word16)
+    putE cs
+    mapM_ putE as'
+
+putEventSpec (ProgramEnv cs es) = do
+    let es' = unsep es
+    putE (fromIntegral (length es') + sz_capset :: Word16)
+    putE cs
+    mapM_ putE es'
+
+putEventSpec (OsProcessPid cs pid) = do
+    putE cs
+    putE pid
+
+putEventSpec (OsProcessParentPid cs ppid) = do
+    putE cs
+    putE ppid
+
+putEventSpec (WallClockTime cs sec nsec) = do
+    putE cs
+    putE sec
+    putE nsec
+
+putEventSpec (Message s) = do
+    putE (fromIntegral (length s) :: Word16)
+    mapM_ putE s
+
+putEventSpec (UserMessage s) = do
+    putE (fromIntegral (length s) :: Word16)
+    mapM_ putE s
+
+putEventSpec (UserMarker s) = do
+    putE (fromIntegral (length s) :: Word16)
+    mapM_ putE s
+
+putEventSpec (UnknownEvent {}) = error "putEventSpec UnknownEvent"
+
+putEventSpec (InternString str id) = do
+    putE len
+    mapM_ putE str
+    putE id
+  where len = (fromIntegral (length str) :: Word16) + sz_string_id
+
+putEventSpec (Version s) = do
+    putE (fromIntegral (length s) :: Word16)
+    mapM_ putE s
+
+putEventSpec (ProgramInvocation s) = do
+    putE (fromIntegral (length s) :: Word16)
+    mapM_ putE s
+
+putEventSpec ( EdenStartReceive ) = return ()
+
+putEventSpec ( EdenEndReceive ) = return ()
+
+putEventSpec ( CreateProcess  process ) = do
+    putE process
+
+putEventSpec ( KillProcess process ) = do
+    putE process
+
+putEventSpec ( AssignThreadToProcess thread process ) = do
+    putE thread
+    putE process
+
+putEventSpec ( CreateMachine machine realtime ) = do
+    putE machine
+    putE realtime
+
+putEventSpec ( KillMachine machine ) = do
+    putE machine
+
+putEventSpec ( SendMessage mesTag senderProcess senderThread
+                 receiverMachine receiverProcess receiverInport ) = do
+    putE (fromMsgTag mesTag)
+    putE senderProcess
+    putE senderThread
+    putE receiverMachine
+    putE receiverProcess
+    putE receiverInport
+
+putEventSpec ( ReceiveMessage mesTag receiverProcess receiverInport
+                 senderMachine senderProcess senderThread messageSize ) = do
+    putE (fromMsgTag mesTag)
+    putE receiverProcess
+    putE receiverInport
+    putE senderMachine
+    putE senderProcess
+    putE senderThread
+    putE messageSize
+
+putEventSpec ( SendReceiveLocalMessage mesTag senderProcess senderThread
+                 receiverProcess receiverInport ) = do
+    putE (fromMsgTag mesTag)
+    putE senderProcess
+    putE senderThread
+    putE receiverProcess
+    putE receiverInport
+
+putEventSpec (MerStartParConjunction dyn_id static_id) = do
+    putE dyn_id
+    putE static_id
+
+putEventSpec (MerEndParConjunction dyn_id) =
+    putE dyn_id
+
+putEventSpec (MerEndParConjunct dyn_id) =
+    putE dyn_id
+
+putEventSpec (MerCreateSpark dyn_id spark_id) = do
+    putE dyn_id
+    putE spark_id
+
+putEventSpec (MerFutureCreate future_id name_id) = do
+    putE future_id
+    putE name_id
+
+putEventSpec (MerFutureWaitNosuspend future_id) =
+    putE future_id
+
+putEventSpec (MerFutureWaitSuspended future_id) =
+    putE future_id
+
+putEventSpec (MerFutureSignal future_id) =
+    putE future_id
+
+putEventSpec MerLookingForGlobalThread = return ()
+putEventSpec MerWorkStealing = return ()
+putEventSpec MerLookingForLocalSpark = return ()
+
+putEventSpec (MerReleaseThread thread_id) =
+    putE thread_id
+
+putEventSpec MerCapSleeping = return ()
+putEventSpec MerCallingMain = return ()
+
+putEventSpec PerfName{..} = do
+    putE (fromIntegral (length name) + sz_perf_num :: Word16)
+    putE perfNum
+    mapM_ putE name
+
+putEventSpec PerfCounter{..} = do
+    putE perfNum
+    putE tid
+    putE period
+
+putEventSpec PerfTracepoint{..} = do
+    putE perfNum
+    putE tid
+
+-- [] == []
+-- [x] == x\0
+-- [x, y, z] == x\0y\0
+unsep :: [String] -> String
+unsep = concatMap (++"\0") -- not the most efficient, but should be ok
+
+splitNull :: String -> [String]
+splitNull [] = []
+splitNull xs = case span (/= '\0') xs of
+                (x, xs') -> x : splitNull (drop 1 xs')
diff --git a/src/GHC/RTS/Events/Incremental.hs b/src/GHC/RTS/Events/Incremental.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Incremental.hs
@@ -0,0 +1,205 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE MultiWayIf #-}
+module GHC.RTS.Events.Incremental
+  ( -- * Incremental API
+    Decoder(..)
+  , decodeHeader
+  , decodeEvents
+  , decodeEventLog
+
+  -- * Lazy API
+  , readHeader
+  , readEvents
+  , readEventLog
+  ) where
+import Control.Monad
+import Data.Either
+import Data.Maybe
+import Prelude
+
+import qualified Data.Binary.Get as G
+import qualified Data.ByteString as B
+import qualified Data.ByteString.Lazy as BL
+import qualified Data.ByteString.Lazy.Internal as BL
+import qualified Data.IntMap.Strict as IM
+
+import GHC.RTS.EventParserUtils
+import GHC.RTS.EventTypes
+import GHC.RTS.Events.Binary
+
+#define EVENTLOG_CONSTANTS_ONLY
+#include "EventLogFormat.h"
+
+-- | The unfolding of the decoding process.
+data Decoder a
+  = Consume (B.ByteString -> Decoder a)
+  -- ^ The decoder has consumed all the available input and needs more to
+  -- continue.
+  | Produce !a (Decoder a)
+  -- ^ The decoder has returned a decoded value and the next decoder state to
+  -- continue.
+  | Done B.ByteString
+  -- ^ The decoder has ended with leftover input.
+  | Error B.ByteString String
+  -- ^ The decoder has encountered an error with lefover input and an error
+  -- message.
+
+-- | Push an input chunk to the decoder
+pushChunk :: Decoder a -> B.ByteString -> Decoder a
+pushChunk decoder chunk = case decoder of
+  Consume k -> k chunk
+  Produce a decoder' -> Produce a $ decoder' `pushChunk` chunk
+  Done leftover -> Done $ leftover `B.append` chunk
+  Error leftover err -> Error (leftover `B.append` chunk) err
+
+-- | Decode a header and continue with the provided decoder
+withHeader
+  :: (Header -> B.ByteString -> Decoder r)
+  -- ^ Continuation
+  -> Decoder r
+withHeader f = go $ G.runGetIncremental getHeader
+  where
+    go decoder = case decoder of
+      G.Done leftover _ header -> f header leftover
+      G.Partial k -> Consume $ \chunk -> go $ k $ Just chunk
+      G.Fail leftover _ err -> Error leftover err
+
+-- | Decode a header
+decodeHeader :: Decoder Header
+decodeHeader = withHeader $ \header leftover -> Produce header $ Done leftover
+
+-- | Decode events
+decodeEvents :: Header -> Decoder Event
+decodeEvents header = go (0 :: Int) Nothing decoder0
+  where
+    decoder0 = mkEventDecoder header
+    go !remaining !blockCap decoder = case decoder of
+      G.Done leftover consumed r -> do
+        let !decoder' = decoder0 `G.pushChunk` leftover
+        case r of
+          Just event -> case evSpec event of
+            EventBlock {..} ->
+              go (fromIntegral block_size) (mkCap cap) decoder'
+            _ -> do
+              let
+                !remaining' = remaining - fromIntegral consumed
+                !blockCap' = if remaining' > 0 then blockCap else Nothing
+                !event' = event { evCap = blockCap }
+              Produce event' $ go remaining' blockCap' decoder'
+          Nothing -> go remaining blockCap decoder'
+      G.Partial k ->
+        Consume $ \chunk -> go remaining blockCap $ k $ Just chunk
+      G.Fail leftover _ err ->
+        Error leftover err
+
+-- | Decode a header and events
+decodeEventLog :: Decoder Event
+decodeEventLog = withHeader $ \header leftover ->
+  decodeEvents header `pushChunk` leftover
+
+-- | Read a header from a lazy bytestring and return the header and the
+-- leftover input for subsequent decoding.
+--
+-- Note that the input must contain a whole header in one go. If incremental
+-- parsing of a header is necessary, use 'decodeHeader' instead.
+readHeader :: BL.ByteString -> Either String (Header, BL.ByteString)
+readHeader = go $ Left decodeHeader
+  where
+    go r bytes = case r of
+      Left decoder -> case decoder of
+        Produce header decoder' -> case decoder' of
+          Done leftover -> Right (header, BL.Chunk leftover bytes)
+          _ -> fail "readHeader: unexpected decoder"
+        Consume k -> case bytes of
+          BL.Empty -> fail "readHeader: not enough bytes"
+          BL.Chunk chunk chunks -> go (Left $! k chunk) chunks
+        Done _ -> fail "readHeader: unexpected termination"
+        Error _ err -> fail err
+      Right header -> Right (header, bytes)
+
+-- | Read events from a lazy bytestring. It returns an error message if it
+-- encouters an error while decoding.
+--
+-- Note that it doesn't fail if it consumes all input in the middle of decoding
+-- of an event.
+readEvents :: Header -> BL.ByteString -> ([Event], Maybe String)
+readEvents header = f . go (decodeEvents header)
+  where
+    f :: [Either e a] -> ([a], Maybe e)
+    f xs = (rights rs, listToMaybe (lefts ls))
+      where
+        (rs, ls) = break isLeft xs
+#if !MIN_VERSION_base(4, 7, 0)
+        isLeft (Left _) = True
+        isLeft _ = False
+#endif
+    go :: Decoder Event -> BL.ByteString -> [Either String Event]
+    go decoder bytes = case decoder of
+      Produce event decoder' -> Right event : go decoder' bytes
+      Consume k -> case bytes of
+        BL.Empty -> []
+        BL.Chunk chunk chunks -> go (k chunk) chunks
+      Done {} -> []
+      Error _ err -> [Left err]
+
+-- | Read an entire eventlog from a lazy bytestring. It returns an error message if it
+-- encouters an error while decoding.
+--
+-- Note that it doesn't fail if it consumes all input in the middle of decoding
+-- of an event.
+readEventLog :: BL.ByteString -> Either String (EventLog, Maybe String)
+readEventLog bytes = do
+  (header, bytes') <- readHeader bytes
+  case readEvents header bytes' of
+    (events, err) -> return (EventLog header (Data events), err)
+
+-- | Makes a decoder with all the required parsers when given a Header
+mkEventDecoder :: Header -> G.Decoder (Maybe Event)
+mkEventDecoder header = G.runGetIncremental $ getEvent parsers
+  where
+    imap = IM.fromList [(fromIntegral (num t), t) | t <- eventTypes header]
+    -- This test is complete, no-one has extended this event yet and all future
+    -- extensions will use newly allocated event IDs.
+    is_ghc_6 = Just sz_old_tid == do
+      create_et <- IM.lookup EVENT_CREATE_THREAD imap
+      size create_et
+    -- GHC6 writes an invalid header, we handle it here by using a
+    -- different set of event parsers.  Note that the ghc7 event parsers
+    -- are standard events, and can be used by other runtime systems that
+    -- make use of threadscope.
+
+    -- GHC-7.8.2 uses a different thread block status encoding,
+    -- and therefore requires a different parser for the stop
+    -- event. Later, in GHC-7.8.3, the old encoding was restored.
+    -- GHC-7.8.2 can be recognised by presence and absence of
+    -- events in the header:
+    --   * User markers were added in GHC-7.8
+    --   * an empty event HACK_BUG_T9003 was added in GHC-7.8.3
+    -- This fix breaks software which uses ghc-events and combines
+    -- user markers with the older stop status encoding. We don't
+    -- know of any such software, though.
+    is_pre77 = IM.notMember EVENT_USER_MARKER imap
+    is_ghc782 = IM.member EVENT_USER_MARKER imap
+      && IM.notMember EVENT_HACK_BUG_T9003 imap
+
+    stopParsers
+      | is_pre77 = pre77StopParsers
+      | is_ghc782 = [ghc782StopParser]
+      | otherwise = [post782StopParser]
+
+    event_parsers
+      | is_ghc_6 = concat
+        [ standardParsers
+        , ghc6Parsers
+        , parRTSParsers sz_old_tid
+        ]
+      | otherwise = concat
+        [ standardParsers
+        , ghc7Parsers
+        , stopParsers
+        , parRTSParsers sz_tid
+        , mercuryParsers
+        , perfParsers
+        ]
+    parsers = EventParsers $ mkEventTypeParsers imap event_parsers
diff --git a/src/GHC/RTS/Events/Merge.hs b/src/GHC/RTS/Events/Merge.hs
new file mode 100644
--- /dev/null
+++ b/src/GHC/RTS/Events/Merge.hs
@@ -0,0 +1,113 @@
+module GHC.RTS.Events.Merge (mergeEventLogs) where
+
+import GHC.RTS.Events
+import Data.Monoid
+import Data.List (foldl')
+import qualified Data.Map as M
+import Data.Word (Word32)
+import Prelude
+
+-- TODO: add a merge mode where the events are synchronized using
+-- the wall clock time event at the start of both eventlogs (for newer GHCs).
+-- Such merge is not associative so we either need to take many arguments
+-- or cope with eventlogs with many wall clock time events (assume they
+-- are products of previous merges). To decide.
+
+{-
+GHC numbers caps and capsets in sequential order, starting at 0.  Threads are
+similarly numbered, but start at 1.  In order to merge logs 'x' and 'y',
+we find the # of occupied numbers for each variable type in 'x',
+then increment each variable in 'y' by that amount.
+We assume that if a number is occupied, so are all lower numbers.
+This guarantees that variables in each log don't clash,
+and that the meaning of each reference to a thread/cap/capset is
+preserved.
+-}
+
+mergeEventLogs :: EventLog -> EventLog -> EventLog
+mergeEventLogs (EventLog h1 (Data xs)) (EventLog h2 (Data ys)) =
+  let headerMap = M.fromList . map (\ et@EventType {num} -> (num, et))
+      m1 = headerMap $ eventTypes h1
+      m2 = headerMap $ eventTypes h2
+      combine et1 et2 | et1 == et2 = et1
+      combine _ _ = error "can't merge eventlogs with inconsistent headers"
+      m = M.unionWith combine m1 m2
+      h = Header $ M.elems m
+  in h == h `seq`  -- Detect inconsistency ASAP.
+     EventLog h . Data . mergeOn evTime xs $ shift (maxVars xs) ys
+
+mergeOn :: Ord b => (a -> b) -> [a] -> [a] -> [a]
+mergeOn _ [] ys = ys
+mergeOn _ xs [] = xs
+mergeOn f (x:xs) (y:ys) | f x <= f y = x : mergeOn f xs (y:ys)
+                        | otherwise  = y : mergeOn f (x:xs) ys
+
+-- TODO: rename, since these are not maximal values, but numbers of used values
+data MaxVars = MaxVars { mcapset :: !Word32
+                       , mcap :: !Int
+                       , mthread :: !ThreadId }
+-- TODO introduce parallel RTS process and machine var.s
+
+instance Monoid MaxVars where
+    mempty  = MaxVars 0 0 0
+    mappend (MaxVars a b c) (MaxVars x y z) =
+      MaxVars (max a x) (b + y) (max c z)
+    -- avoid space leaks:
+    mconcat = foldl' mappend mempty
+
+-- For caps we find the maximum value by summing the @Startup@ declarations.
+-- TODO: it's not trivial to add CapCreate since we don't know
+-- if created caps are guaranteed to be numbered consecutively or not
+-- (are they? is it asserted in GHC code somewhere?). We might instead
+-- just scan all events mentioning a cap and take the maximum,
+-- but it's a slower and much longer code, requiring constant maintenance.
+maxVars :: [Event] -> MaxVars
+maxVars = mconcat . map (maxSpec . evSpec)
+ where
+    -- only checking binding sites right now, sufficient?
+    maxSpec (Startup n) = mempty { mcap = n }
+    -- Threads start at 1.
+    maxSpec (CreateThread t) = mempty { mthread = t }
+    maxSpec (CreateSparkThread t) = mempty { mthread = t }
+    -- Capsets start at 0.
+    maxSpec (CapsetCreate cs _) = mempty {mcapset = cs + 1 }
+    maxSpec _  = mempty
+
+sh :: Num a => a -> a -> a
+sh x y = x + y
+
+updateSpec :: (EventInfo -> EventInfo) -> Event -> Event
+updateSpec f (Event {evTime = t, evSpec = s, evCap = cap}) =
+    Event {evTime = t, evSpec = f s, evCap = cap}
+
+shift :: MaxVars -> [Event] -> [Event]
+shift (MaxVars mcs mc mt) = map (updateSpec shift')
+ where
+    -- -1 marks a block that isn't attached to a particular capability
+    shift' (CreateThread t) = CreateThread $ sh mt t
+    shift' (RunThread t) = RunThread $ sh mt t
+    shift' (StopThread t s) = StopThread (sh mt t) s
+    shift' (ThreadRunnable t) = ThreadRunnable $ sh mt t
+    shift' (MigrateThread t c) = MigrateThread (sh mt t) (sh mc c)
+    shift' (WakeupThread t c) = WakeupThread (sh mt t) (sh mc c)
+    shift' (ThreadLabel t l) = ThreadLabel (sh mt t) l
+    shift' (CreateSparkThread t) = CreateSparkThread (sh mt t)
+    shift' (SparkSteal c) = SparkSteal (sh mc c)
+    shift' (TaskCreate tk c tid) = TaskCreate tk (sh mc c) tid
+    shift' (TaskMigrate tk c1 c2) = TaskMigrate tk (sh mc c1) (sh mc c2)
+    shift' (CapCreate c) = CapCreate (sh mc c)  -- TODO: correct?
+    shift' (CapDelete c) = CapDelete (sh mc c)  -- TODO: correct?
+    shift' (CapDisable c) = CapDisable (sh mc c)
+    shift' (CapEnable c) = CapEnable (sh mc c)
+    shift' (CapsetCreate cs cst) = CapsetCreate (sh mcs cs) cst
+    shift' (CapsetDelete cs) = CapsetDelete (sh mcs cs)
+    shift' (CapsetAssignCap cs c) = CapsetAssignCap (sh mcs cs) (sh mc c)
+    shift' (CapsetRemoveCap cs c) = CapsetRemoveCap (sh mcs cs) (sh mc c)
+    shift' (RtsIdentifier cs rts) = RtsIdentifier (sh mcs cs) rts
+    shift' (ProgramArgs cs as) = ProgramArgs (sh mcs cs) as
+    shift' (ProgramEnv cs es) = ProgramEnv (sh mcs cs) es
+    shift' (OsProcessPid cs pid) = OsProcessPid (sh mcs cs) pid
+    shift' (OsProcessParentPid cs ppid) = OsProcessParentPid (sh mcs cs) ppid
+    shift' (WallClockTime cs sec nsec) = WallClockTime (sh mcs cs) sec nsec
+    shift' x = x
+    -- TODO extend by new shift for Eden events
diff --git a/test/782stop.eventlog.reference b/test/782stop.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/782stop.eventlog.reference
@@ -0,0 +1,147 @@
+Event Types:
+0: Create thread (size 4)
+1: Run thread (size 4)
+2: Stop thread (size 10)
+3: Thread runnable (size 4)
+4: Migrate thread (size 6)
+8: Wakeup thread (size 6)
+9: Starting GC (size 0)
+10: Finished GC (size 0)
+11: Request sequential GC (size 0)
+12: Request parallel GC (size 0)
+15: Create spark thread (size 4)
+16: Log message (size variable)
+17: Create capabilities (size 2)
+18: Block marker (size 14)
+19: User message (size variable)
+20: GC idle (size 0)
+21: GC working (size 0)
+22: GC done (size 0)
+23: Version (size variable)
+24: Program invocation (size variable)
+25: Create capability set (size 6)
+26: Delete capability set (size 4)
+27: Add capability to capability set (size 6)
+28: Remove capability from capability set (size 6)
+29: RTS name and version (size variable)
+30: Program arguments (size variable)
+31: Program environment variables (size variable)
+32: Process ID (size 8)
+33: Parent process ID (size 8)
+34: Spark counters (size 56)
+35: Spark create (size 0)
+36: Spark dud (size 0)
+37: Spark overflow (size 0)
+38: Spark run (size 0)
+39: Spark steal (size 2)
+40: Spark fizzle (size 0)
+41: Spark GC (size 0)
+43: Wall clock time (size 16)
+44: Thread label (size variable)
+45: Create capability (size 2)
+46: Delete capability (size 2)
+47: Disable capability (size 2)
+48: Enable capability (size 2)
+49: Total heap mem ever allocated (size 12)
+50: Current heap size (size 12)
+51: Current heap live data (size 12)
+52: Heap static parameters (size 38)
+53: GC statistics (size 50)
+54: Synchronise stop-the-world GC (size 0)
+55: Task create (size 18)
+56: Task migrate (size 12)
+57: Task delete (size 8)
+58: User marker (size variable)
+60: Starting message receival (size 0)
+61: Finished message receival (size 0)
+62: Creating Process (size 4)
+63: Killing Process (size 4)
+64: Assigning thread to process (size 8)
+65: Creating machine (size 10)
+66: Killing machine (size 2)
+67: Sending message (size 19)
+68: Receiving message (size 23)
+69: Sending/Receiving local message (size 17)
+
+Events:
+431075: startup: 1 capabilities
+438021: created capset 0 of type CapsetOsProcess
+438382: created capset 1 of type CapsetClockDomain
+439886: created cap 0
+440061: assigned cap 0 to capset 0
+440191: assigned cap 0 to capset 1
+446866: capset 1: wall clock time 1405192655s 464811000ns (unix epoch)
+447318: capset 0: pid 19951
+449452: capset 0: parent pid 18797
+453913: capset 0: RTS version "GHC-7.8.20140411 rts_l"
+462067: capset 0: args: ["./wrong782","+RTS","-lsu-g-p","-K80m","-k10m","-H200m","-C1s"]
+468191: capset 0: env: ["SSH_AGENT_PID=1817","PVM_RSH=/usr/bin/ssh","GPG_AGENT_INFO=/tmp/keyring-yTUMmt/gpg:0:1","TERM=xterm","SHELL=/bin/bash","XDG_SESSION_COOKIE=acf1c79e0e2de67643be755c00000003-1405160974.283591-1531347675","WINDOWID=58743399","OLDPWD=/opt/Eden/edentv/fixFor783/BLD-ghc-events-parallel","GNOME_KEYRING_CONTROL=/tmp/keyring-yTUMmt","USER=jost","LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0","XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0","PVM_ROOT=/usr/lib/pvm3","SSH_AUTH_SOCK=/tmp/keyring-yTUMmt/ssh","SESSION_MANAGER=local/onAir:@/tmp/.ICE-unix/1781,unix/onAir:/tmp/.ICE-unix/1781","DEFAULTS_PATH=/usr/share/gconf/gnome-fallback.default.path","PVM_ARCH=LINUX64","XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome-fallback:/etc/xdg","PATH=/home/jost/bin:/home/jost/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jost/.cabal/bin","DESKTOP_SESSION=gnome-fallback","PWD=/opt/Eden/edentv/fixFor783","GNOME_KEYRING_PID=1770","LANG=en_US.UTF-8","MANDATORY_PATH=/usr/share/gconf/gnome-fallback.mandatory.path","UBUNTU_MENUPROXY=libappmenu.so","GDMSESSION=gnome-fallback","SHLVL=1","HOME=/home/jost","LANGUAGE=en_US:en","GNOME_DESKTOP_SESSION_ID=this-is-deprecated","LOGNAME=jost","PVM_EXPORT=DISPLAY","XDG_DATA_DIRS=/usr/share/gnome-fallback:/usr/share/gnome:/usr/local/share/:/usr/share/","DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Mviy2n6D5M,guid=3677210ad991dc7e0dc3a1ae00000012","LESSOPEN=| /usr/bin/lesspipe %s","DISPLAY=:0.0","XDG_CURRENT_DESKTOP=GNOME","LESSCLOSE=/usr/bin/lesspipe %s %s","COLORTERM=gnome-terminal","XAUTHORITY=/home/jost/.Xauthority","_=./wrong782"]
+671062: task 0x10130c0 created on cap 0 with OS kernel thread 19951
+699893: cap 0: creating thread 1
+706834: cap 0: running thread 1
+761740: cap 0: stopping thread 1 (heap overflow)
+4742525: cap 0: running thread 1
+4987428: cap 0: stopping thread 1 (making a foreign call)
+4989828: cap 0: running thread 1
+5098303: cap 0: forking child thread
+5129059: cap 0: creating thread 2
+5130773: cap 0: stopping thread 1 (thread yielding)
+5132416: cap 0: running thread 2
+5139072: cap 0: stopping thread 2 (heap overflow)
+5786180: cap 0: running thread 2
+5798149: cap 0: child
+10666308: cap 0: stopping thread 2 (thread yielding)
+10667787: cap 0: running thread 1
+10678973: cap 0: stopping thread 1 (blocked on black hole owned by thread 2)
+10679120: cap 0: running thread 2
+193941318: cap 0: stopping thread 2 (heap overflow)
+194546751: cap 0: running thread 2
+331983948: cap 0: stopping thread 2 (heap overflow)
+332477310: cap 0: running thread 2
+469015937: cap 0: stopping thread 2 (heap overflow)
+469529035: cap 0: running thread 2
+606849548: cap 0: stopping thread 2 (heap overflow)
+607359608: cap 0: running thread 2
+743648511: cap 0: stopping thread 2 (heap overflow)
+744192151: cap 0: running thread 2
+837873869: cap 0: waking up thread 1 on cap 0
+837889639: cap 0: stopping thread 2 (making a foreign call)
+837891084: cap 0: running thread 2
+837932390: cap 0: filling full MVar
+837934536: cap 0: stopping thread 2 (blocked on an MVar)
+837935465: cap 0: running thread 1
+837938331: cap 0: stopping thread 1 (making a foreign call)
+837938636: cap 0: running thread 1
+837948387: cap 0: emptying full MVar
+837948906: cap 0: waking up thread 2 on cap 0
+837952944: cap 0: stopping thread 1 (making a foreign call)
+837953253: cap 0: running thread 1
+837980148: cap 0: reading empty MVar
+837980980: cap 0: stopping thread 1 (blocked reading an MVar)
+837981248: cap 0: running thread 2
+837981623: cap 0: stopping thread 2 (thread yielding)
+837981784: cap 0: running thread 2
+837983458: cap 0: filling empty MVar
+837983715: cap 0: waking up thread 1 on cap 0
+837983884: cap 0: stopping thread 2 (thread yielding)
+837984239: cap 0: running thread 1
+837987231: cap 0: stopping thread 1 (making a foreign call)
+837987524: cap 0: running thread 1
+837994266: cap 0: stopping thread 1 (thread finished)
+837995393: task 0x10130c0 deleted
+837999453: task 0x10130c0 created on cap 0 with OS kernel thread 19951
+838005207: cap 0: creating thread 3
+838005677: cap 0: running thread 2
+838006764: cap 0: stopping thread 2 (heap overflow)
+838522385: cap 0: running thread 2
+838528422: cap 0: child finished
+838529109: cap 0: stopping thread 2 (thread finished)
+838529502: cap 0: running thread 3
+838541350: cap 0: stopping thread 3 (thread finished)
+838541718: task 0x10130c0 deleted
+839458388: removed cap 0 from capset 0
+839458655: removed cap 0 from capset 1
+839458852: deleted cap 0
+839458945: deleted capset 0
+839458993: deleted capset 1
+
diff --git a/test/783stop.eventlog.reference b/test/783stop.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/783stop.eventlog.reference
@@ -0,0 +1,148 @@
+Event Types:
+0: Create thread (size 4)
+1: Run thread (size 4)
+2: Stop thread (size 10)
+3: Thread runnable (size 4)
+4: Migrate thread (size 6)
+8: Wakeup thread (size 6)
+9: Starting GC (size 0)
+10: Finished GC (size 0)
+11: Request sequential GC (size 0)
+12: Request parallel GC (size 0)
+15: Create spark thread (size 4)
+16: Log message (size variable)
+17: Create capabilities (size 2)
+18: Block marker (size 14)
+19: User message (size variable)
+20: GC idle (size 0)
+21: GC working (size 0)
+22: GC done (size 0)
+23: Version (size variable)
+24: Program invocation (size variable)
+25: Create capability set (size 6)
+26: Delete capability set (size 4)
+27: Add capability to capability set (size 6)
+28: Remove capability from capability set (size 6)
+29: RTS name and version (size variable)
+30: Program arguments (size variable)
+31: Program environment variables (size variable)
+32: Process ID (size 8)
+33: Parent process ID (size 8)
+34: Spark counters (size 56)
+35: Spark create (size 0)
+36: Spark dud (size 0)
+37: Spark overflow (size 0)
+38: Spark run (size 0)
+39: Spark steal (size 2)
+40: Spark fizzle (size 0)
+41: Spark GC (size 0)
+43: Wall clock time (size 16)
+44: Thread label (size variable)
+45: Create capability (size 2)
+46: Delete capability (size 2)
+47: Disable capability (size 2)
+48: Enable capability (size 2)
+49: Total heap mem ever allocated (size 12)
+50: Current heap size (size 12)
+51: Current heap live data (size 12)
+52: Heap static parameters (size 38)
+53: GC statistics (size 50)
+54: Synchronise stop-the-world GC (size 0)
+55: Task create (size 18)
+56: Task migrate (size 12)
+57: Task delete (size 8)
+58: User marker (size variable)
+59: Empty event for bug #9003 (size 0)
+60: Starting message receival (size 0)
+61: Finished message receival (size 0)
+62: Creating Process (size 4)
+63: Killing Process (size 4)
+64: Assigning thread to process (size 8)
+65: Creating machine (size 10)
+66: Killing machine (size 2)
+67: Sending message (size 19)
+68: Receiving message (size 23)
+69: Sending/Receiving local message (size 17)
+
+Events:
+440074: startup: 1 capabilities
+446518: created capset 0 of type CapsetOsProcess
+446769: created capset 1 of type CapsetClockDomain
+448177: created cap 0
+448347: assigned cap 0 to capset 0
+448483: assigned cap 0 to capset 1
+455484: capset 1: wall clock time 1405192714s 116018000ns (unix epoch)
+456191: capset 0: pid 19972
+458325: capset 0: parent pid 18797
+464895: capset 0: RTS version "GHC-7.8.3 rts_l"
+473314: capset 0: args: ["./wrong783","+RTS","-lsu-g-p","-K80m","-k10m","-H200m","-C1s"]
+479103: capset 0: env: ["SSH_AGENT_PID=1817","PVM_RSH=/usr/bin/ssh","GPG_AGENT_INFO=/tmp/keyring-yTUMmt/gpg:0:1","TERM=xterm","SHELL=/bin/bash","XDG_SESSION_COOKIE=acf1c79e0e2de67643be755c00000003-1405160974.283591-1531347675","WINDOWID=58743399","OLDPWD=/opt/Eden/edentv/fixFor783/BLD-ghc-events-parallel","GNOME_KEYRING_CONTROL=/tmp/keyring-yTUMmt","USER=jost","LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0","XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0","PVM_ROOT=/usr/lib/pvm3","SSH_AUTH_SOCK=/tmp/keyring-yTUMmt/ssh","SESSION_MANAGER=local/onAir:@/tmp/.ICE-unix/1781,unix/onAir:/tmp/.ICE-unix/1781","DEFAULTS_PATH=/usr/share/gconf/gnome-fallback.default.path","PVM_ARCH=LINUX64","XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome-fallback:/etc/xdg","PATH=/home/jost/bin:/home/jost/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jost/.cabal/bin","DESKTOP_SESSION=gnome-fallback","PWD=/opt/Eden/edentv/fixFor783","GNOME_KEYRING_PID=1770","LANG=en_US.UTF-8","MANDATORY_PATH=/usr/share/gconf/gnome-fallback.mandatory.path","UBUNTU_MENUPROXY=libappmenu.so","GDMSESSION=gnome-fallback","SHLVL=1","HOME=/home/jost","LANGUAGE=en_US:en","GNOME_DESKTOP_SESSION_ID=this-is-deprecated","LOGNAME=jost","PVM_EXPORT=DISPLAY","XDG_DATA_DIRS=/usr/share/gnome-fallback:/usr/share/gnome:/usr/local/share/:/usr/share/","DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Mviy2n6D5M,guid=3677210ad991dc7e0dc3a1ae00000012","LESSOPEN=| /usr/bin/lesspipe %s","DISPLAY=:0.0","XDG_CURRENT_DESKTOP=GNOME","LESSCLOSE=/usr/bin/lesspipe %s %s","COLORTERM=gnome-terminal","XAUTHORITY=/home/jost/.Xauthority","_=./wrong783"]
+699793: task 0x12e70c0 created on cap 0 with OS kernel thread 19972
+732448: cap 0: creating thread 1
+739574: cap 0: running thread 1
+793934: cap 0: stopping thread 1 (heap overflow)
+4798987: cap 0: running thread 1
+5055994: cap 0: stopping thread 1 (making a foreign call)
+5058329: cap 0: running thread 1
+5148943: cap 0: forking child thread
+5182260: cap 0: creating thread 2
+5183843: cap 0: stopping thread 1 (thread yielding)
+5185547: cap 0: running thread 2
+5192128: cap 0: stopping thread 2 (heap overflow)
+6603911: cap 0: running thread 2
+6625740: cap 0: child
+10691075: cap 0: stopping thread 2 (thread yielding)
+10692575: cap 0: running thread 1
+10700572: cap 0: stopping thread 1 (blocked on black hole owned by thread 2)
+10700759: cap 0: running thread 2
+196062624: cap 0: stopping thread 2 (heap overflow)
+196666678: cap 0: running thread 2
+333935541: cap 0: stopping thread 2 (heap overflow)
+334485420: cap 0: running thread 2
+471949022: cap 0: stopping thread 2 (heap overflow)
+472424843: cap 0: running thread 2
+609441585: cap 0: stopping thread 2 (heap overflow)
+609951485: cap 0: running thread 2
+746397738: cap 0: stopping thread 2 (heap overflow)
+746948628: cap 0: running thread 2
+840110617: cap 0: waking up thread 1 on cap 0
+840126355: cap 0: stopping thread 2 (making a foreign call)
+840127652: cap 0: running thread 2
+840169975: cap 0: filling full MVar
+840172153: cap 0: stopping thread 2 (blocked on an MVar)
+840172971: cap 0: running thread 1
+840176011: cap 0: stopping thread 1 (making a foreign call)
+840176353: cap 0: running thread 1
+840188167: cap 0: emptying full MVar
+840188906: cap 0: waking up thread 2 on cap 0
+840193329: cap 0: stopping thread 1 (making a foreign call)
+840193566: cap 0: running thread 1
+840223344: cap 0: reading empty MVar
+840224025: cap 0: stopping thread 1 (blocked reading an MVar)
+840224469: cap 0: running thread 2
+840224730: cap 0: stopping thread 2 (thread yielding)
+840224861: cap 0: running thread 2
+840226951: cap 0: filling empty MVar
+840227415: cap 0: waking up thread 1 on cap 0
+840227605: cap 0: stopping thread 2 (thread yielding)
+840228120: cap 0: running thread 1
+840231481: cap 0: stopping thread 1 (making a foreign call)
+840231796: cap 0: running thread 1
+840239072: cap 0: stopping thread 1 (thread finished)
+840240156: task 0x12e70c0 deleted
+840243853: task 0x12e70c0 created on cap 0 with OS kernel thread 19972
+840249364: cap 0: creating thread 3
+840249779: cap 0: running thread 2
+840251082: cap 0: stopping thread 2 (heap overflow)
+840785630: cap 0: running thread 2
+840791099: cap 0: child finished
+840792041: cap 0: stopping thread 2 (thread finished)
+840792454: cap 0: running thread 3
+840801940: cap 0: stopping thread 3 (thread finished)
+840802357: task 0x12e70c0 deleted
+841728886: removed cap 0 from capset 0
+841728999: removed cap 0 from capset 1
+841729260: deleted cap 0
+841729327: deleted capset 0
+841729456: deleted capset 1
+
diff --git a/test/TestVersions.hs b/test/TestVersions.hs
--- a/test/TestVersions.hs
+++ b/test/TestVersions.hs
@@ -14,26 +14,19 @@
 Where queens.hs is http://darcs.haskell.org/nofib/parallel/queens/Main.hs
 -}
 
+import System.Exit (exitFailure)
+
 import GHC.RTS.Events
-import System.Exit
+import GHC.RTS.Events.Incremental
+import Utils (files, diffLines)
 
-files :: [FilePath]
-files = map ("test/"++)
-    [ "queens-ghc-6.12.1.eventlog"
-    , "queens-ghc-7.0.2.eventlog"
-    , "mandelbrot-mmc-2011-06-14.eventlog" 
-    , "mdlLogMPI1.eventlog"
-    , "pre77stop.eventlog", "782stop.eventlog", "783stop.eventlog" ]
 
--- returns True on success
 testFile :: FilePath -> IO Bool
 testFile f = do
     e <- readEventLogFromFile f
-    let oops s = putStrLn (f ++ ": failure" ++ s) >> return False
-
+    let oops s = putStrLn (f ++ ": failure " ++ s) >> return False
     case e of
         Left m -> oops m
-
         Right newlogdata -> do
             oldlog <- readFile (f ++ ".reference")
             let newlog = ppEventLog newlogdata ++ "\n" in
@@ -47,21 +40,3 @@
     if and successes
         then return ()
         else exitFailure
-
---
--- Code to help print the differences between a working test and a failing test.
---
-
-diffLines o n = diff 1 (lines o) (lines n)
-
-diff :: Int -> [String] -> [String] -> String
-diff _ [] [] = "Logs match"
-diff l [] (n:ns) = "Extra lines in new log at line " ++ show l ++ ":\n" ++
-    (unlines (n:ns))
-diff l (o:os) [] = "Missing lines in new log at line " ++ show l ++ ":\n" ++
-    (unlines (o:os))
-diff l (o:os) (n:ns) = if (o == n)
-                        then diff (l+1) os ns
-                        else "Different lines at line " ++ show l ++ ":\n" ++
-                            "Original: " ++ o ++ "\n" ++
-                            "New:      " ++ n
diff --git a/test/Utils.hs b/test/Utils.hs
new file mode 100644
--- /dev/null
+++ b/test/Utils.hs
@@ -0,0 +1,25 @@
+module Utils where
+
+files :: [FilePath]
+files = map ("test/"++)
+    [ "queens-ghc-6.12.1.eventlog"
+    , "queens-ghc-7.0.2.eventlog"
+    , "mandelbrot-mmc-2011-06-14.eventlog"
+    , "parallelTest.eventlog"
+    , "pre77stop.eventlog", "782stop.eventlog", "783stop.eventlog" ]
+
+
+-- Code to help print the differences between a working test and a failing test.
+diffLines o n = diff 1 (lines o) (lines n)
+
+diff :: Int -> [String] -> [String] -> String
+diff _ [] [] = "Logs match"
+diff l [] (n:ns) = "Extra lines in new log at line " ++ show l ++ ":\n" ++
+    (unlines (n:ns))
+diff l (o:os) [] = "Missing lines in new log at line " ++ show l ++ ":\n" ++
+    (unlines (o:os))
+diff l (o:os) (n:ns) = if (o == n)
+                        then diff (l+1) os ns
+                        else "Different output at line " ++ show l ++ ":\n" ++
+                            "Original: " ++ o ++ "\n" ++
+                            "New:      " ++ n
diff --git a/test/WriteMerge.hs b/test/WriteMerge.hs
new file mode 100644
--- /dev/null
+++ b/test/WriteMerge.hs
@@ -0,0 +1,46 @@
+{-
+  This test checks the functionality of `ghc-events merge` and writeEventLogToFile
+-}
+import Control.Monad
+import qualified Data.ByteString.Lazy as BL
+import Data.List (( \\ ))
+import Data.Maybe (fromJust)
+import System.Exit (exitFailure)
+
+import GHC.RTS.Events
+import GHC.RTS.Events.Incremental (readEventLog)
+import Utils (files, diffLines)
+
+-- Failing test cases due to changes introduced some time in the past but
+-- went unnoticed. Needs fixing. TODO
+failingCases :: [FilePath]
+failingCases = map ("test/"++)
+  [ "queens-ghc-6.12.1.eventlog"
+  , "queens-ghc-7.0.2.eventlog"
+  , "mandelbrot-mmc-2011-06-14.eventlog"
+  , "782stop.eventlog"]
+
+rewriteLog :: EventLog -> EventLog
+rewriteLog oldLog = case readEventLog (serialiseEventLog oldLog) of
+  Left reason -> error reason
+  Right (newLog, _) -> newLog
+
+testFile :: FilePath -> IO Bool
+testFile f = do
+  e <- readEventLogFromFile f
+  let oops s = putStrLn (f ++ ": failure " ++ s) >> return False
+  case e of
+    Left m -> oops m
+    Right log -> do
+      let old = ppEventLog log
+      let new = ppEventLog $ rewriteLog log
+      if old == new
+        then putStrLn (f ++ ": success") >> return True
+        else do
+          putStrLn $ diffLines old new
+          oops "re-written file does not match the original"
+
+main :: IO ()
+main = do
+  successes <- mapM testFile files
+  unless (and successes) exitFailure
diff --git a/test/mandelbrot-mmc-2011-06-14.eventlog.reference b/test/mandelbrot-mmc-2011-06-14.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/mandelbrot-mmc-2011-06-14.eventlog.reference
@@ -0,0 +1,5596 @@
+Event Types:
+17: Startup (num_engines) (size 2)
+7: Shutdown (size 0)
+18: A block of events generated by a specific engine follows (size 14)
+0: A context is created or re-used (size 4)
+3: The context is being placed on the run queue (size 4)
+5: Run a spark from the local stack (size 8)
+6: Run a spark stolen from another engine (size 10)
+1: Run context (size 4)
+2: Context stopped (size 6)
+15: Create a context for executing a spark (size 4)
+16: A user-provided log message (size variable)
+9: Start GC (size 0)
+10: Stop GC (size 0)
+39: Register an id->string mapping (size variable)
+40: About to call main/2 (size 0)
+25: Create an engine set (size 6)
+26: Detete an engine set (size 4)
+27: Add an engine to an engine set (size 6)
+28: Add an engine to an engine set (size 6)
+29: The type of the runtime system for this capset (size variable)
+30: The command line arguments of this process (size variable)
+31: The environment variables this process inherited (size variable)
+32: The pid and parent pid of this process (size 8)
+103: A spark is being created (size 12)
+100: Start a parallel conjunction (dyn id, static id) (size 12)
+101: End a parallel conjunction (dyn id) (size 8)
+102: End a parallel conjunct (dyn id) (size 8)
+104: Create a future (future id) (size 12)
+105: Wait on a future without suspending (future id) (size 8)
+106: Wait on a future by suspending this thread (future id) (size 8)
+107: Signal a future (future id) (size 8)
+108: Engine begins looking for a context to execute (size 0)
+109: Engine begins attempt to steal work (size 0)
+110: Release this context to the free context pool (size 4)
+
+Events:
+0: created capset 0 of type CapsetOsProcess
+0: capset 0: RTS version "mmc-DEV"
+0: startup: 4 capabilities
+0: Register an id->string mapping
+0: Register an id->string mapping
+0: Register an id->string mapping
+0: Register an id->string mapping
+0: assigned cap 0 to capset 0
+0: assigned cap 3 to capset 0
+0: assigned cap 1 to capset 0
+0: assigned cap 2 to capset 0
+4198126: cap 0: creating thread 1
+4199512: cap 0: running thread 1
+9983902: cap 3: Looking for global thread to resume
+9987484: cap 3: Trying to steal a spark
+10575823: cap 1: Looking for global thread to resume
+10577452: cap 1: Trying to steal a spark
+10694043: cap 2: Looking for global thread to resume
+10694551: cap 2: Trying to steal a spark
+10852245: cap 0: spark fizzled
+11153997: cap 0: Start a parallel conjunction 0x2515150, static_id: 2
+11155725: cap 0: Create spark for conjunction: 0x2515150 spark: 0x0
+11165265: cap 0: Start a parallel conjunction 0x25151b0, static_id: 2
+11165593: cap 0: Create spark for conjunction: 0x25151b0 spark: 0x1
+11169886: cap 0: Start a parallel conjunction 0x2515210, static_id: 2
+11170080: cap 0: Create spark for conjunction: 0x2515210 spark: 0x2
+11172546: cap 0: Start a parallel conjunction 0x2515270, static_id: 2
+11172730: cap 0: Create spark for conjunction: 0x2515270 spark: 0x3
+11173041: cap 0: Start a parallel conjunction 0x25152d0, static_id: 2
+11173338: cap 0: Create spark for conjunction: 0x25152d0 spark: 0x4
+11173905: cap 0: Start a parallel conjunction 0x2515330, static_id: 2
+11174107: cap 0: Create spark for conjunction: 0x2515330 spark: 0x5
+11174143: cap 2: Trying to steal a spark
+11174413: cap 0: Start a parallel conjunction 0x2515390, static_id: 2
+11174760: cap 0: Create spark for conjunction: 0x2515390 spark: 0x6
+11175034: cap 0: Start a parallel conjunction 0x25153f0, static_id: 2
+11175610: cap 0: Create spark for conjunction: 0x25153f0 spark: 0x7
+11175853: cap 3: Trying to steal a spark
+11175885: cap 0: Start a parallel conjunction 0x2515450, static_id: 2
+11177316: cap 2: stealing a spark from cap 0
+11178108: cap 3: stealing a spark from cap 0
+11198002: cap 0: Create spark for conjunction: 0x2515450 spark: 0x8
+11198394: cap 0: Start a parallel conjunction 0x25154b0, static_id: 2
+11198601: cap 0: Create spark for conjunction: 0x25154b0 spark: 0x9
+11198880: cap 0: Start a parallel conjunction 0x2515510, static_id: 2
+11199069: cap 0: Create spark for conjunction: 0x2515510 spark: 0xa
+11199352: cap 0: Start a parallel conjunction 0x2515570, static_id: 2
+11199541: cap 0: Create spark for conjunction: 0x2515570 spark: 0xb
+11199829: cap 0: Start a parallel conjunction 0x25155d0, static_id: 2
+11200014: cap 0: Create spark for conjunction: 0x25155d0 spark: 0xc
+11200275: cap 0: Start a parallel conjunction 0x2515630, static_id: 2
+11200468: cap 0: Create spark for conjunction: 0x2515630 spark: 0xd
+11200743: cap 0: Start a parallel conjunction 0x2515690, static_id: 2
+11200918: cap 0: Create spark for conjunction: 0x2515690 spark: 0xe
+11201206: cap 0: Start a parallel conjunction 0x25156f0, static_id: 2
+11201418: cap 0: Create spark for conjunction: 0x25156f0 spark: 0xf
+11201719: cap 0: Start a parallel conjunction 0x2515750, static_id: 2
+11201899: cap 0: Create spark for conjunction: 0x2515750 spark: 0x10
+11202174: cap 0: Start a parallel conjunction 0x25157b0, static_id: 2
+11220259: cap 0: Create spark for conjunction: 0x25157b0 spark: 0x11
+11220592: cap 0: Start a parallel conjunction 0x2515810, static_id: 2
+11220772: cap 0: Create spark for conjunction: 0x2515810 spark: 0x12
+11221083: cap 0: Start a parallel conjunction 0x2515870, static_id: 2
+11221272: cap 0: Create spark for conjunction: 0x2515870 spark: 0x13
+11221533: cap 0: Start a parallel conjunction 0x25158d0, static_id: 2
+11221731: cap 0: Create spark for conjunction: 0x25158d0 spark: 0x14
+11222005: cap 0: Start a parallel conjunction 0x2515930, static_id: 2
+11222199: cap 0: Create spark for conjunction: 0x2515930 spark: 0x15
+11222478: cap 0: Start a parallel conjunction 0x2515990, static_id: 2
+11222671: cap 0: Create spark for conjunction: 0x2515990 spark: 0x16
+11222941: cap 0: Start a parallel conjunction 0x25159f0, static_id: 2
+11223130: cap 0: Create spark for conjunction: 0x25159f0 spark: 0x17
+11223400: cap 0: Start a parallel conjunction 0x2515a50, static_id: 2
+11223580: cap 0: Create spark for conjunction: 0x2515a50 spark: 0x18
+11223886: cap 0: Start a parallel conjunction 0x2515ab0, static_id: 2
+11224066: cap 0: Create spark for conjunction: 0x2515ab0 spark: 0x19
+11224336: cap 0: Start a parallel conjunction 0x2515b10, static_id: 2
+11224543: cap 0: Create spark for conjunction: 0x2515b10 spark: 0x1a
+11224827: cap 0: Start a parallel conjunction 0x2515b70, static_id: 2
+11225007: cap 0: Create spark for conjunction: 0x2515b70 spark: 0x1b
+11225286: cap 0: Start a parallel conjunction 0x2515bd0, static_id: 2
+11225470: cap 0: Create spark for conjunction: 0x2515bd0 spark: 0x1c
+11225758: cap 0: Start a parallel conjunction 0x2515c30, static_id: 2
+11225956: cap 0: Create spark for conjunction: 0x2515c30 spark: 0x1d
+11226240: cap 0: Start a parallel conjunction 0x2515c90, static_id: 2
+11226424: cap 0: Create spark for conjunction: 0x2515c90 spark: 0x1e
+11226708: cap 0: Start a parallel conjunction 0x2515cf0, static_id: 2
+11226892: cap 0: Create spark for conjunction: 0x2515cf0 spark: 0x1f
+11227176: cap 0: Start a parallel conjunction 0x2515d50, static_id: 2
+11227374: cap 0: Create spark for conjunction: 0x2515d50 spark: 0x20
+11227653: cap 0: Start a parallel conjunction 0x2515db0, static_id: 2
+11299891: cap 0: Create spark for conjunction: 0x2515db0 spark: 0x21
+11300346: cap 0: Start a parallel conjunction 0x2515e10, static_id: 2
+11300535: cap 0: Create spark for conjunction: 0x2515e10 spark: 0x22
+11300845: cap 0: Start a parallel conjunction 0x2515e70, static_id: 2
+11301034: cap 0: Create spark for conjunction: 0x2515e70 spark: 0x23
+11301291: cap 0: Start a parallel conjunction 0x2515ed0, static_id: 2
+11301489: cap 0: Create spark for conjunction: 0x2515ed0 spark: 0x24
+11301772: cap 0: Start a parallel conjunction 0x2515f30, static_id: 2
+11301961: cap 0: Create spark for conjunction: 0x2515f30 spark: 0x25
+11302245: cap 0: Start a parallel conjunction 0x2515f90, static_id: 2
+11302438: cap 0: Create spark for conjunction: 0x2515f90 spark: 0x26
+11302726: cap 0: Start a parallel conjunction 0x2515ff0, static_id: 2
+11302929: cap 0: Create spark for conjunction: 0x2515ff0 spark: 0x27
+11303212: cap 0: Start a parallel conjunction 0x2516050, static_id: 2
+11303401: cap 0: Create spark for conjunction: 0x2516050 spark: 0x28
+11303698: cap 0: Start a parallel conjunction 0x25160b0, static_id: 2
+11303883: cap 0: Create spark for conjunction: 0x25160b0 spark: 0x29
+11304162: cap 0: Start a parallel conjunction 0x2516110, static_id: 2
+11304351: cap 0: Create spark for conjunction: 0x2516110 spark: 0x2a
+11304630: cap 0: Start a parallel conjunction 0x2516170, static_id: 2
+11304814: cap 0: Create spark for conjunction: 0x2516170 spark: 0x2b
+11305093: cap 0: Start a parallel conjunction 0x25161d0, static_id: 2
+11305287: cap 0: Create spark for conjunction: 0x25161d0 spark: 0x2c
+11305566: cap 0: Start a parallel conjunction 0x2516230, static_id: 2
+11305759: cap 0: Create spark for conjunction: 0x2516230 spark: 0x2d
+11306034: cap 0: Start a parallel conjunction 0x2516290, static_id: 2
+11306214: cap 0: Create spark for conjunction: 0x2516290 spark: 0x2e
+11306493: cap 0: Start a parallel conjunction 0x25162f0, static_id: 2
+11306673: cap 0: Create spark for conjunction: 0x25162f0 spark: 0x2f
+11306943: cap 0: Start a parallel conjunction 0x2516350, static_id: 2
+11307127: cap 0: Create spark for conjunction: 0x2516350 spark: 0x30
+11307402: cap 0: Start a parallel conjunction 0x25163b0, static_id: 2
+11307586: cap 0: Create spark for conjunction: 0x25163b0 spark: 0x31
+11307852: cap 0: Start a parallel conjunction 0x2516410, static_id: 2
+11308036: cap 0: Create spark for conjunction: 0x2516410 spark: 0x32
+11308320: cap 0: Start a parallel conjunction 0x2516470, static_id: 2
+11308509: cap 0: Create spark for conjunction: 0x2516470 spark: 0x33
+11308788: cap 0: Start a parallel conjunction 0x25164d0, static_id: 2
+11308990: cap 0: Create spark for conjunction: 0x25164d0 spark: 0x34
+11309265: cap 0: Start a parallel conjunction 0x2516530, static_id: 2
+11309445: cap 0: Create spark for conjunction: 0x2516530 spark: 0x35
+11309751: cap 0: Start a parallel conjunction 0x2516590, static_id: 2
+11309931: cap 0: Create spark for conjunction: 0x2516590 spark: 0x36
+11310196: cap 0: Start a parallel conjunction 0x25165f0, static_id: 2
+11310394: cap 0: Create spark for conjunction: 0x25165f0 spark: 0x37
+11310678: cap 0: Start a parallel conjunction 0x2516650, static_id: 2
+11310867: cap 0: Create spark for conjunction: 0x2516650 spark: 0x38
+11311155: cap 0: Start a parallel conjunction 0x25166b0, static_id: 2
+11311339: cap 0: Create spark for conjunction: 0x25166b0 spark: 0x39
+11311609: cap 0: Start a parallel conjunction 0x2516710, static_id: 2
+11311794: cap 0: Create spark for conjunction: 0x2516710 spark: 0x3a
+11312073: cap 0: Start a parallel conjunction 0x2516770, static_id: 2
+11312253: cap 0: Create spark for conjunction: 0x2516770 spark: 0x3b
+11312532: cap 0: Start a parallel conjunction 0x25167d0, static_id: 2
+11312721: cap 0: Create spark for conjunction: 0x25167d0 spark: 0x3c
+11313000: cap 0: Start a parallel conjunction 0x2516830, static_id: 2
+11313211: cap 0: Create spark for conjunction: 0x2516830 spark: 0x3d
+11313490: cap 0: Start a parallel conjunction 0x2516890, static_id: 2
+11313670: cap 0: Create spark for conjunction: 0x2516890 spark: 0x3e
+11313954: cap 0: Start a parallel conjunction 0x25168f0, static_id: 2
+11314138: cap 0: Create spark for conjunction: 0x25168f0 spark: 0x3f
+11314399: cap 0: Start a parallel conjunction 0x2516950, static_id: 2
+11314593: cap 0: Create spark for conjunction: 0x2516950 spark: 0x40
+11314872: cap 0: Start a parallel conjunction 0x25169b0, static_id: 2
+11358931: cap 0: Create spark for conjunction: 0x25169b0 spark: 0x41
+11359269: cap 0: Start a parallel conjunction 0x2516a10, static_id: 2
+11359453: cap 0: Create spark for conjunction: 0x2516a10 spark: 0x42
+11359755: cap 0: Start a parallel conjunction 0x2516a70, static_id: 2
+11359948: cap 0: Create spark for conjunction: 0x2516a70 spark: 0x43
+11360232: cap 0: Start a parallel conjunction 0x2516ad0, static_id: 2
+11360421: cap 0: Create spark for conjunction: 0x2516ad0 spark: 0x44
+11360700: cap 0: Start a parallel conjunction 0x2516b30, static_id: 2
+11360902: cap 0: Create spark for conjunction: 0x2516b30 spark: 0x45
+11361181: cap 0: Start a parallel conjunction 0x2516b90, static_id: 2
+11361370: cap 0: Create spark for conjunction: 0x2516b90 spark: 0x46
+11361645: cap 0: Start a parallel conjunction 0x2516bf0, static_id: 2
+11361843: cap 0: Create spark for conjunction: 0x2516bf0 spark: 0x47
+11362117: cap 0: Start a parallel conjunction 0x2516c50, static_id: 2
+11362302: cap 0: Create spark for conjunction: 0x2516c50 spark: 0x48
+11362599: cap 0: Start a parallel conjunction 0x2516cb0, static_id: 2
+11362810: cap 0: Create spark for conjunction: 0x2516cb0 spark: 0x49
+11363089: cap 0: Start a parallel conjunction 0x2516d10, static_id: 2
+11363274: cap 0: Create spark for conjunction: 0x2516d10 spark: 0x4a
+11363553: cap 0: Start a parallel conjunction 0x2516d70, static_id: 2
+11363742: cap 0: Create spark for conjunction: 0x2516d70 spark: 0x4b
+11364021: cap 0: Start a parallel conjunction 0x2516dd0, static_id: 2
+11364205: cap 0: Create spark for conjunction: 0x2516dd0 spark: 0x4c
+11364480: cap 0: Start a parallel conjunction 0x2516e30, static_id: 2
+11364682: cap 0: Create spark for conjunction: 0x2516e30 spark: 0x4d
+11364948: cap 0: Start a parallel conjunction 0x2516e90, static_id: 2
+11365128: cap 0: Create spark for conjunction: 0x2516e90 spark: 0x4e
+11365420: cap 0: Start a parallel conjunction 0x2516ef0, static_id: 2
+11365609: cap 0: Create spark for conjunction: 0x2516ef0 spark: 0x4f
+11365879: cap 0: Start a parallel conjunction 0x2516f50, static_id: 2
+11366059: cap 0: Create spark for conjunction: 0x2516f50 spark: 0x50
+11366338: cap 0: Start a parallel conjunction 0x2516fb0, static_id: 2
+11366527: cap 0: Create spark for conjunction: 0x2516fb0 spark: 0x51
+11366833: cap 0: Start a parallel conjunction 0x2517010, static_id: 2
+11367022: cap 0: Create spark for conjunction: 0x2517010 spark: 0x52
+11367319: cap 0: Start a parallel conjunction 0x2517070, static_id: 2
+11367513: cap 0: Create spark for conjunction: 0x2517070 spark: 0x53
+11367778: cap 0: Start a parallel conjunction 0x25170d0, static_id: 2
+11367972: cap 0: Create spark for conjunction: 0x25170d0 spark: 0x54
+11368246: cap 0: Start a parallel conjunction 0x2517130, static_id: 2
+11368444: cap 0: Create spark for conjunction: 0x2517130 spark: 0x55
+11368723: cap 0: Start a parallel conjunction 0x2517190, static_id: 2
+11368908: cap 0: Create spark for conjunction: 0x2517190 spark: 0x56
+11369182: cap 0: Start a parallel conjunction 0x25171f0, static_id: 2
+11369385: cap 0: Create spark for conjunction: 0x25171f0 spark: 0x57
+11369664: cap 0: Start a parallel conjunction 0x2517250, static_id: 2
+11369853: cap 0: Create spark for conjunction: 0x2517250 spark: 0x58
+11370136: cap 0: Start a parallel conjunction 0x25172b0, static_id: 2
+11370334: cap 0: Create spark for conjunction: 0x25172b0 spark: 0x59
+11370609: cap 0: Start a parallel conjunction 0x2517310, static_id: 2
+11370811: cap 0: Create spark for conjunction: 0x2517310 spark: 0x5a
+11371090: cap 0: Start a parallel conjunction 0x2517370, static_id: 2
+11371297: cap 0: Create spark for conjunction: 0x2517370 spark: 0x5b
+11371702: cap 0: Start a parallel conjunction 0x25173d0, static_id: 2
+11371887: cap 0: Create spark for conjunction: 0x25173d0 spark: 0x5c
+11372152: cap 0: Start a parallel conjunction 0x2517430, static_id: 2
+11372463: cap 0: Create spark for conjunction: 0x2517430 spark: 0x5d
+11372746: cap 0: Start a parallel conjunction 0x2517490, static_id: 2
+11372931: cap 0: Create spark for conjunction: 0x2517490 spark: 0x5e
+11373349: cap 0: Start a parallel conjunction 0x25174f0, static_id: 2
+11373552: cap 0: Create spark for conjunction: 0x25174f0 spark: 0x5f
+11373831: cap 0: Start a parallel conjunction 0x2517550, static_id: 2
+11374024: cap 0: Create spark for conjunction: 0x2517550 spark: 0x60
+11374299: cap 0: Start a parallel conjunction 0x25175b0, static_id: 2
+11374492: cap 0: Create spark for conjunction: 0x25175b0 spark: 0x61
+11374758: cap 0: Start a parallel conjunction 0x2517610, static_id: 2
+11374942: cap 0: Create spark for conjunction: 0x2517610 spark: 0x62
+11375221: cap 0: Start a parallel conjunction 0x2517670, static_id: 2
+11375415: cap 0: Create spark for conjunction: 0x2517670 spark: 0x63
+11375671: cap 0: Start a parallel conjunction 0x25176d0, static_id: 2
+11375865: cap 0: Create spark for conjunction: 0x25176d0 spark: 0x64
+11376148: cap 0: Start a parallel conjunction 0x2517730, static_id: 2
+11376342: cap 0: Create spark for conjunction: 0x2517730 spark: 0x65
+11376616: cap 0: Start a parallel conjunction 0x2517790, static_id: 2
+11376805: cap 0: Create spark for conjunction: 0x2517790 spark: 0x66
+11377062: cap 0: Start a parallel conjunction 0x25177f0, static_id: 2
+11377264: cap 0: Create spark for conjunction: 0x25177f0 spark: 0x67
+11377539: cap 0: Start a parallel conjunction 0x2517850, static_id: 2
+11377723: cap 0: Create spark for conjunction: 0x2517850 spark: 0x68
+11378007: cap 0: Start a parallel conjunction 0x25178b0, static_id: 2
+11378205: cap 0: Create spark for conjunction: 0x25178b0 spark: 0x69
+11378484: cap 0: Start a parallel conjunction 0x2517910, static_id: 2
+11378677: cap 0: Create spark for conjunction: 0x2517910 spark: 0x6a
+11378965: cap 0: Start a parallel conjunction 0x2517970, static_id: 2
+11379168: cap 0: Create spark for conjunction: 0x2517970 spark: 0x6b
+11379465: cap 0: Start a parallel conjunction 0x25179d0, static_id: 2
+11379649: cap 0: Create spark for conjunction: 0x25179d0 spark: 0x6c
+11379915: cap 0: Start a parallel conjunction 0x2517a30, static_id: 2
+11380117: cap 0: Create spark for conjunction: 0x2517a30 spark: 0x6d
+11380378: cap 0: Start a parallel conjunction 0x2517a90, static_id: 2
+11380558: cap 0: Create spark for conjunction: 0x2517a90 spark: 0x6e
+11380837: cap 0: Start a parallel conjunction 0x2517af0, static_id: 2
+11381040: cap 0: Create spark for conjunction: 0x2517af0 spark: 0x6f
+11381296: cap 0: Start a parallel conjunction 0x2517b50, static_id: 2
+11381481: cap 0: Create spark for conjunction: 0x2517b50 spark: 0x70
+11381751: cap 0: Start a parallel conjunction 0x2517bb0, static_id: 2
+11381953: cap 0: Create spark for conjunction: 0x2517bb0 spark: 0x71
+11382219: cap 0: Start a parallel conjunction 0x2517c10, static_id: 2
+11382412: cap 0: Create spark for conjunction: 0x2517c10 spark: 0x72
+11382700: cap 0: Start a parallel conjunction 0x2517c70, static_id: 2
+11382912: cap 0: Create spark for conjunction: 0x2517c70 spark: 0x73
+11383195: cap 0: Start a parallel conjunction 0x2517cd0, static_id: 2
+11383402: cap 0: Create spark for conjunction: 0x2517cd0 spark: 0x74
+11383672: cap 0: Start a parallel conjunction 0x2517d30, static_id: 2
+11383875: cap 0: Create spark for conjunction: 0x2517d30 spark: 0x75
+11384163: cap 0: Start a parallel conjunction 0x2517d90, static_id: 2
+11384352: cap 0: Create spark for conjunction: 0x2517d90 spark: 0x76
+11384622: cap 0: Start a parallel conjunction 0x2517df0, static_id: 2
+11384824: cap 0: Create spark for conjunction: 0x2517df0 spark: 0x77
+11385099: cap 0: Start a parallel conjunction 0x2517e50, static_id: 2
+11385288: cap 0: Create spark for conjunction: 0x2517e50 spark: 0x78
+11385567: cap 0: Start a parallel conjunction 0x2517eb0, static_id: 2
+11385765: cap 0: Create spark for conjunction: 0x2517eb0 spark: 0x79
+11386021: cap 0: Start a parallel conjunction 0x2517f10, static_id: 2
+11386210: cap 0: Create spark for conjunction: 0x2517f10 spark: 0x7a
+11386480: cap 0: Start a parallel conjunction 0x2517f70, static_id: 2
+11386674: cap 0: Create spark for conjunction: 0x2517f70 spark: 0x7b
+11386971: cap 0: Start a parallel conjunction 0x2517fd0, static_id: 2
+11387160: cap 0: Create spark for conjunction: 0x2517fd0 spark: 0x7c
+11387475: cap 0: Start a parallel conjunction 0x2518030, static_id: 2
+11387695: cap 0: Create spark for conjunction: 0x2518030 spark: 0x7d
+11388001: cap 0: Start a parallel conjunction 0x2518090, static_id: 2
+11388190: cap 0: Create spark for conjunction: 0x2518090 spark: 0x7e
+11388496: cap 0: Start a parallel conjunction 0x25180f0, static_id: 2
+11388699: cap 0: Create spark for conjunction: 0x25180f0 spark: 0x7f
+11388960: cap 0: Start a parallel conjunction 0x2518150, static_id: 2
+11389144: cap 0: Create spark for conjunction: 0x2518150 spark: 0x80
+11389423: cap 0: Start a parallel conjunction 0x25181b0, static_id: 2
+11409403: cap 0: Create spark for conjunction: 0x25181b0 spark: 0x81
+11409732: cap 0: Start a parallel conjunction 0x2518210, static_id: 2
+11409930: cap 0: Create spark for conjunction: 0x2518210 spark: 0x82
+11410236: cap 0: Start a parallel conjunction 0x2518270, static_id: 2
+11410425: cap 0: Create spark for conjunction: 0x2518270 spark: 0x83
+11410699: cap 0: Start a parallel conjunction 0x25182d0, static_id: 2
+11410947: cap 0: Create spark for conjunction: 0x25182d0 spark: 0x84
+11411226: cap 0: Start a parallel conjunction 0x2518330, static_id: 2
+11411406: cap 0: Create spark for conjunction: 0x2518330 spark: 0x85
+11411694: cap 0: Start a parallel conjunction 0x2518390, static_id: 2
+11411874: cap 0: Create spark for conjunction: 0x2518390 spark: 0x86
+11412135: cap 0: Start a parallel conjunction 0x25183f0, static_id: 2
+11412337: cap 0: Create spark for conjunction: 0x25183f0 spark: 0x87
+11412621: cap 0: Start a parallel conjunction 0x2518450, static_id: 2
+11412868: cap 0: Create spark for conjunction: 0x2518450 spark: 0x88
+11413170: cap 0: Start a parallel conjunction 0x25184b0, static_id: 2
+11413363: cap 0: Create spark for conjunction: 0x25184b0 spark: 0x89
+11413638: cap 0: Start a parallel conjunction 0x2518510, static_id: 2
+11413822: cap 0: Create spark for conjunction: 0x2518510 spark: 0x8a
+11414218: cap 0: Start a parallel conjunction 0x2518570, static_id: 2
+11414461: cap 0: Create spark for conjunction: 0x2518570 spark: 0x8b
+11414758: cap 0: Start a parallel conjunction 0x25185d0, static_id: 2
+11414938: cap 0: Create spark for conjunction: 0x25185d0 spark: 0x8c
+11415213: cap 0: Start a parallel conjunction 0x2518630, static_id: 2
+11415415: cap 0: Create spark for conjunction: 0x2518630 spark: 0x8d
+11415685: cap 0: Start a parallel conjunction 0x2518690, static_id: 2
+11415865: cap 0: Create spark for conjunction: 0x2518690 spark: 0x8e
+11416149: cap 0: Start a parallel conjunction 0x25186f0, static_id: 2
+11416333: cap 0: Create spark for conjunction: 0x25186f0 spark: 0x8f
+11416603: cap 0: Start a parallel conjunction 0x2518750, static_id: 2
+11416788: cap 0: Create spark for conjunction: 0x2518750 spark: 0x90
+11417067: cap 0: Start a parallel conjunction 0x25187b0, static_id: 2
+11417256: cap 0: Create spark for conjunction: 0x25187b0 spark: 0x91
+11417530: cap 0: Start a parallel conjunction 0x2518810, static_id: 2
+11417715: cap 0: Create spark for conjunction: 0x2518810 spark: 0x92
+11418012: cap 0: Start a parallel conjunction 0x2518870, static_id: 2
+11418205: cap 0: Create spark for conjunction: 0x2518870 spark: 0x93
+11418471: cap 0: Start a parallel conjunction 0x25188d0, static_id: 2
+11418669: cap 0: Create spark for conjunction: 0x25188d0 spark: 0x94
+11418961: cap 0: Start a parallel conjunction 0x2518930, static_id: 2
+11419150: cap 0: Create spark for conjunction: 0x2518930 spark: 0x95
+11419434: cap 0: Start a parallel conjunction 0x2518990, static_id: 2
+11419618: cap 0: Create spark for conjunction: 0x2518990 spark: 0x96
+11419879: cap 0: Start a parallel conjunction 0x25189f0, static_id: 2
+11420077: cap 0: Create spark for conjunction: 0x25189f0 spark: 0x97
+11420352: cap 0: Start a parallel conjunction 0x2518a50, static_id: 2
+11420536: cap 0: Create spark for conjunction: 0x2518a50 spark: 0x98
+11420838: cap 0: Start a parallel conjunction 0x2518ab0, static_id: 2
+11421036: cap 0: Create spark for conjunction: 0x2518ab0 spark: 0x99
+11421315: cap 0: Start a parallel conjunction 0x2518b10, static_id: 2
+11421513: cap 0: Create spark for conjunction: 0x2518b10 spark: 0x9a
+11421792: cap 0: Start a parallel conjunction 0x2518b70, static_id: 2
+11421985: cap 0: Create spark for conjunction: 0x2518b70 spark: 0x9b
+11422264: cap 0: Start a parallel conjunction 0x2518bd0, static_id: 2
+11422449: cap 0: Create spark for conjunction: 0x2518bd0 spark: 0x9c
+11422737: cap 0: Start a parallel conjunction 0x2518c30, static_id: 2
+11422939: cap 0: Create spark for conjunction: 0x2518c30 spark: 0x9d
+11423209: cap 0: Start a parallel conjunction 0x2518c90, static_id: 2
+11423403: cap 0: Create spark for conjunction: 0x2518c90 spark: 0x9e
+11423686: cap 0: Start a parallel conjunction 0x2518cf0, static_id: 2
+11423871: cap 0: Create spark for conjunction: 0x2518cf0 spark: 0x9f
+11424136: cap 0: Start a parallel conjunction 0x2518d50, static_id: 2
+11424316: cap 0: Create spark for conjunction: 0x2518d50 spark: 0xa0
+11424586: cap 0: Start a parallel conjunction 0x2518db0, static_id: 2
+11424780: cap 0: Create spark for conjunction: 0x2518db0 spark: 0xa1
+11425050: cap 0: Start a parallel conjunction 0x2518e10, static_id: 2
+11425234: cap 0: Create spark for conjunction: 0x2518e10 spark: 0xa2
+11425536: cap 0: Start a parallel conjunction 0x2518e70, static_id: 2
+11425725: cap 0: Create spark for conjunction: 0x2518e70 spark: 0xa3
+11425995: cap 0: Start a parallel conjunction 0x2518ed0, static_id: 2
+11426184: cap 0: Create spark for conjunction: 0x2518ed0 spark: 0xa4
+11426458: cap 0: Start a parallel conjunction 0x2518f30, static_id: 2
+11426643: cap 0: Create spark for conjunction: 0x2518f30 spark: 0xa5
+11426935: cap 0: Start a parallel conjunction 0x2518f90, static_id: 2
+11427151: cap 0: Create spark for conjunction: 0x2518f90 spark: 0xa6
+11427466: cap 0: Start a parallel conjunction 0x2518ff0, static_id: 2
+11427673: cap 0: Create spark for conjunction: 0x2518ff0 spark: 0xa7
+11427952: cap 0: Start a parallel conjunction 0x2519050, static_id: 2
+11428141: cap 0: Create spark for conjunction: 0x2519050 spark: 0xa8
+11428429: cap 0: Start a parallel conjunction 0x25190b0, static_id: 2
+11428609: cap 0: Create spark for conjunction: 0x25190b0 spark: 0xa9
+11428875: cap 0: Start a parallel conjunction 0x2519110, static_id: 2
+11429064: cap 0: Create spark for conjunction: 0x2519110 spark: 0xaa
+11429365: cap 0: Start a parallel conjunction 0x2519170, static_id: 2
+11429554: cap 0: Create spark for conjunction: 0x2519170 spark: 0xab
+11429842: cap 0: Start a parallel conjunction 0x25191d0, static_id: 2
+11430036: cap 0: Create spark for conjunction: 0x25191d0 spark: 0xac
+11430310: cap 0: Start a parallel conjunction 0x2519230, static_id: 2
+11430504: cap 0: Create spark for conjunction: 0x2519230 spark: 0xad
+11430774: cap 0: Start a parallel conjunction 0x2519290, static_id: 2
+11430954: cap 0: Create spark for conjunction: 0x2519290 spark: 0xae
+11431246: cap 0: Start a parallel conjunction 0x25192f0, static_id: 2
+11431431: cap 0: Create spark for conjunction: 0x25192f0 spark: 0xaf
+11431696: cap 0: Start a parallel conjunction 0x2519350, static_id: 2
+11431885: cap 0: Create spark for conjunction: 0x2519350 spark: 0xb0
+11432164: cap 0: Start a parallel conjunction 0x25193b0, static_id: 2
+11432358: cap 0: Create spark for conjunction: 0x25193b0 spark: 0xb1
+11432632: cap 0: Start a parallel conjunction 0x2519410, static_id: 2
+11432821: cap 0: Create spark for conjunction: 0x2519410 spark: 0xb2
+11433213: cap 0: Start a parallel conjunction 0x2519470, static_id: 2
+11433406: cap 0: Create spark for conjunction: 0x2519470 spark: 0xb3
+11433681: cap 0: Start a parallel conjunction 0x25194d0, static_id: 2
+11433892: cap 0: Create spark for conjunction: 0x25194d0 spark: 0xb4
+11434185: cap 0: Start a parallel conjunction 0x2519530, static_id: 2
+11434378: cap 0: Create spark for conjunction: 0x2519530 spark: 0xb5
+11434657: cap 0: Start a parallel conjunction 0x2519590, static_id: 2
+11434842: cap 0: Create spark for conjunction: 0x2519590 spark: 0xb6
+11435107: cap 0: Start a parallel conjunction 0x25195f0, static_id: 2
+11435323: cap 0: Create spark for conjunction: 0x25195f0 spark: 0xb7
+11435611: cap 0: Start a parallel conjunction 0x2519650, static_id: 2
+11435805: cap 0: Create spark for conjunction: 0x2519650 spark: 0xb8
+11436237: cap 0: Start a parallel conjunction 0x25196b0, static_id: 2
+11436421: cap 0: Create spark for conjunction: 0x25196b0 spark: 0xb9
+11436682: cap 0: Start a parallel conjunction 0x2519710, static_id: 2
+11436979: cap 0: Create spark for conjunction: 0x2519710 spark: 0xba
+11437285: cap 0: Start a parallel conjunction 0x2519770, static_id: 2
+11437488: cap 0: Create spark for conjunction: 0x2519770 spark: 0xbb
+11437834: cap 0: Start a parallel conjunction 0x25197d0, static_id: 2
+11438028: cap 0: Create spark for conjunction: 0x25197d0 spark: 0xbc
+11438311: cap 0: Start a parallel conjunction 0x2519830, static_id: 2
+11438500: cap 0: Create spark for conjunction: 0x2519830 spark: 0xbd
+11438770: cap 0: Start a parallel conjunction 0x2519890, static_id: 2
+11438959: cap 0: Create spark for conjunction: 0x2519890 spark: 0xbe
+11439243: cap 0: Start a parallel conjunction 0x25198f0, static_id: 2
+11439432: cap 0: Create spark for conjunction: 0x25198f0 spark: 0xbf
+11439693: cap 0: Start a parallel conjunction 0x2519950, static_id: 2
+11439886: cap 0: Create spark for conjunction: 0x2519950 spark: 0xc0
+11440170: cap 0: Start a parallel conjunction 0x25199b0, static_id: 2
+11440363: cap 0: Create spark for conjunction: 0x25199b0 spark: 0xc1
+11440633: cap 0: Start a parallel conjunction 0x2519a10, static_id: 2
+11440818: cap 0: Create spark for conjunction: 0x2519a10 spark: 0xc2
+11441097: cap 0: Start a parallel conjunction 0x2519a70, static_id: 2
+11441290: cap 0: Create spark for conjunction: 0x2519a70 spark: 0xc3
+11441560: cap 0: Start a parallel conjunction 0x2519ad0, static_id: 2
+11441749: cap 0: Create spark for conjunction: 0x2519ad0 spark: 0xc4
+11442037: cap 0: Start a parallel conjunction 0x2519b30, static_id: 2
+11442235: cap 0: Create spark for conjunction: 0x2519b30 spark: 0xc5
+11442514: cap 0: Start a parallel conjunction 0x2519b90, static_id: 2
+11442699: cap 0: Create spark for conjunction: 0x2519b90 spark: 0xc6
+11442964: cap 0: Start a parallel conjunction 0x2519bf0, static_id: 2
+11443167: cap 0: Create spark for conjunction: 0x2519bf0 spark: 0xc7
+11443446: cap 0: Start a parallel conjunction 0x2519c50, static_id: 2
+11443635: cap 0: Create spark for conjunction: 0x2519c50 spark: 0xc8
+11444053: cap 0: Start a parallel conjunction 0x2519cb0, static_id: 2
+11444251: cap 0: Create spark for conjunction: 0x2519cb0 spark: 0xc9
+11444517: cap 0: Start a parallel conjunction 0x2519d10, static_id: 2
+11444701: cap 0: Create spark for conjunction: 0x2519d10 spark: 0xca
+11444971: cap 0: Start a parallel conjunction 0x2519d70, static_id: 2
+11445165: cap 0: Create spark for conjunction: 0x2519d70 spark: 0xcb
+11445453: cap 0: Start a parallel conjunction 0x2519dd0, static_id: 2
+11445637: cap 0: Create spark for conjunction: 0x2519dd0 spark: 0xcc
+11445912: cap 0: Start a parallel conjunction 0x2519e30, static_id: 2
+11446101: cap 0: Create spark for conjunction: 0x2519e30 spark: 0xcd
+11446380: cap 0: Start a parallel conjunction 0x2519e90, static_id: 2
+11446564: cap 0: Create spark for conjunction: 0x2519e90 spark: 0xce
+11446848: cap 0: Start a parallel conjunction 0x2519ef0, static_id: 2
+11447041: cap 0: Create spark for conjunction: 0x2519ef0 spark: 0xcf
+11447316: cap 0: Start a parallel conjunction 0x2519f50, static_id: 2
+11447505: cap 0: Create spark for conjunction: 0x2519f50 spark: 0xd0
+11447793: cap 0: Start a parallel conjunction 0x2519fb0, static_id: 2
+11447991: cap 0: Create spark for conjunction: 0x2519fb0 spark: 0xd1
+11448544: cap 0: Start a parallel conjunction 0x251a010, static_id: 2
+11448729: cap 0: Create spark for conjunction: 0x251a010 spark: 0xd2
+11449026: cap 0: Start a parallel conjunction 0x251a070, static_id: 2
+11449206: cap 0: Create spark for conjunction: 0x251a070 spark: 0xd3
+11449480: cap 0: Start a parallel conjunction 0x251a0d0, static_id: 2
+11449678: cap 0: Create spark for conjunction: 0x251a0d0 spark: 0xd4
+11449957: cap 0: Start a parallel conjunction 0x251a130, static_id: 2
+11450155: cap 0: Create spark for conjunction: 0x251a130 spark: 0xd5
+11450443: cap 0: Start a parallel conjunction 0x251a190, static_id: 2
+11450623: cap 0: Create spark for conjunction: 0x251a190 spark: 0xd6
+11450884: cap 0: Start a parallel conjunction 0x251a1f0, static_id: 2
+11451087: cap 0: Create spark for conjunction: 0x251a1f0 spark: 0xd7
+11451370: cap 0: Start a parallel conjunction 0x251a250, static_id: 2
+11451555: cap 0: Create spark for conjunction: 0x251a250 spark: 0xd8
+11451852: cap 0: Start a parallel conjunction 0x251a2b0, static_id: 2
+11452041: cap 0: Create spark for conjunction: 0x251a2b0 spark: 0xd9
+11452311: cap 0: Start a parallel conjunction 0x251a310, static_id: 2
+11452500: cap 0: Create spark for conjunction: 0x251a310 spark: 0xda
+11452779: cap 0: Start a parallel conjunction 0x251a370, static_id: 2
+11452968: cap 0: Create spark for conjunction: 0x251a370 spark: 0xdb
+11453247: cap 0: Start a parallel conjunction 0x251a3d0, static_id: 2
+11453427: cap 0: Create spark for conjunction: 0x251a3d0 spark: 0xdc
+11453701: cap 0: Start a parallel conjunction 0x251a430, static_id: 2
+11453904: cap 0: Create spark for conjunction: 0x251a430 spark: 0xdd
+11454174: cap 0: Start a parallel conjunction 0x251a490, static_id: 2
+11454354: cap 0: Create spark for conjunction: 0x251a490 spark: 0xde
+11454637: cap 0: Start a parallel conjunction 0x251a4f0, static_id: 2
+11454826: cap 0: Create spark for conjunction: 0x251a4f0 spark: 0xdf
+11455092: cap 0: Start a parallel conjunction 0x251a550, static_id: 2
+11455272: cap 0: Create spark for conjunction: 0x251a550 spark: 0xe0
+11455546: cap 0: Start a parallel conjunction 0x251a5b0, static_id: 2
+11455731: cap 0: Create spark for conjunction: 0x251a5b0 spark: 0xe1
+11456014: cap 0: Start a parallel conjunction 0x251a610, static_id: 2
+11456199: cap 0: Create spark for conjunction: 0x251a610 spark: 0xe2
+11456487: cap 0: Start a parallel conjunction 0x251a670, static_id: 2
+11456676: cap 0: Create spark for conjunction: 0x251a670 spark: 0xe3
+11456946: cap 0: Start a parallel conjunction 0x251a6d0, static_id: 2
+11457148: cap 0: Create spark for conjunction: 0x251a6d0 spark: 0xe4
+11457445: cap 0: Start a parallel conjunction 0x251a730, static_id: 2
+11457639: cap 0: Create spark for conjunction: 0x251a730 spark: 0xe5
+11457927: cap 0: Start a parallel conjunction 0x251a790, static_id: 2
+11458107: cap 0: Create spark for conjunction: 0x251a790 spark: 0xe6
+11458372: cap 0: Start a parallel conjunction 0x251a7f0, static_id: 2
+11458566: cap 0: Create spark for conjunction: 0x251a7f0 spark: 0xe7
+11458836: cap 0: Start a parallel conjunction 0x251a850, static_id: 2
+11459020: cap 0: Create spark for conjunction: 0x251a850 spark: 0xe8
+11459299: cap 0: Start a parallel conjunction 0x251a8b0, static_id: 2
+11459493: cap 0: Create spark for conjunction: 0x251a8b0 spark: 0xe9
+11459758: cap 0: Start a parallel conjunction 0x251a910, static_id: 2
+11466868: cap 0: Create spark for conjunction: 0x251a910 spark: 0xea
+11467057: cap 0: Start a parallel conjunction 0x251a970, static_id: 2
+11467179: cap 0: Create spark for conjunction: 0x251a970 spark: 0xeb
+11467372: cap 0: Start a parallel conjunction 0x251a9d0, static_id: 2
+11467494: cap 0: Create spark for conjunction: 0x251a9d0 spark: 0xec
+11467683: cap 0: Start a parallel conjunction 0x251aa30, static_id: 2
+11467809: cap 0: Create spark for conjunction: 0x251aa30 spark: 0xed
+11467993: cap 0: Start a parallel conjunction 0x251aa90, static_id: 2
+11468115: cap 0: Create spark for conjunction: 0x251aa90 spark: 0xee
+11468304: cap 0: Start a parallel conjunction 0x251aaf0, static_id: 2
+11468434: cap 0: Create spark for conjunction: 0x251aaf0 spark: 0xef
+11468619: cap 0: Start a parallel conjunction 0x251ab50, static_id: 2
+11468740: cap 0: Create spark for conjunction: 0x251ab50 spark: 0xf0
+11468920: cap 0: Start a parallel conjunction 0x251abb0, static_id: 2
+11469046: cap 0: Create spark for conjunction: 0x251abb0 spark: 0xf1
+11469226: cap 0: Start a parallel conjunction 0x251ac10, static_id: 2
+11469348: cap 0: Create spark for conjunction: 0x251ac10 spark: 0xf2
+11469532: cap 0: Start a parallel conjunction 0x251ac70, static_id: 2
+11469658: cap 0: Create spark for conjunction: 0x251ac70 spark: 0xf3
+11469834: cap 0: Start a parallel conjunction 0x251acd0, static_id: 2
+11469960: cap 0: Create spark for conjunction: 0x251acd0 spark: 0xf4
+11470144: cap 0: Start a parallel conjunction 0x251ad30, static_id: 2
+11470270: cap 0: Create spark for conjunction: 0x251ad30 spark: 0xf5
+11470464: cap 0: Start a parallel conjunction 0x251ad90, static_id: 2
+11470585: cap 0: Create spark for conjunction: 0x251ad90 spark: 0xf6
+11470761: cap 0: Start a parallel conjunction 0x251adf0, static_id: 2
+11470887: cap 0: Create spark for conjunction: 0x251adf0 spark: 0xf7
+11471071: cap 0: Start a parallel conjunction 0x251ae50, static_id: 2
+11471193: cap 0: Create spark for conjunction: 0x251ae50 spark: 0xf8
+11471391: cap 0: Start a parallel conjunction 0x251aeb0, static_id: 2
+11471512: cap 0: Create spark for conjunction: 0x251aeb0 spark: 0xf9
+11471692: cap 0: Start a parallel conjunction 0x251af10, static_id: 2
+11471818: cap 0: Create spark for conjunction: 0x251af10 spark: 0xfa
+11472223: cap 0: Start a parallel conjunction 0x251af70, static_id: 2
+11472349: cap 0: Create spark for conjunction: 0x251af70 spark: 0xfb
+11472718: cap 0: Start a parallel conjunction 0x251afd0, static_id: 2
+11472844: cap 0: Create spark for conjunction: 0x251afd0 spark: 0xfc
+11473209: cap 0: Start a parallel conjunction 0x251b030, static_id: 2
+11473339: cap 0: Create spark for conjunction: 0x251b030 spark: 0xfd
+11473524: cap 0: Start a parallel conjunction 0x251b090, static_id: 2
+11473645: cap 0: Create spark for conjunction: 0x251b090 spark: 0xfe
+11473834: cap 0: Start a parallel conjunction 0x251b0f0, static_id: 2
+11473956: cap 0: Create spark for conjunction: 0x251b0f0 spark: 0xff
+11474136: cap 0: Start a parallel conjunction 0x251b150, static_id: 2
+11474257: cap 0: Create spark for conjunction: 0x251b150 spark: 0x100
+11474446: cap 0: Start a parallel conjunction 0x251b1b0, static_id: 2
+11497689: cap 0: Create spark for conjunction: 0x251b1b0 spark: 0x101
+11497918: cap 0: Start a parallel conjunction 0x251b210, static_id: 2
+11498053: cap 0: Create spark for conjunction: 0x251b210 spark: 0x102
+11498256: cap 0: Start a parallel conjunction 0x251b270, static_id: 2
+11498391: cap 0: Create spark for conjunction: 0x251b270 spark: 0x103
+11498566: cap 0: Start a parallel conjunction 0x251b2d0, static_id: 2
+11498742: cap 0: Create spark for conjunction: 0x251b2d0 spark: 0x104
+11498926: cap 0: Start a parallel conjunction 0x251b330, static_id: 2
+11499057: cap 0: Create spark for conjunction: 0x251b330 spark: 0x105
+11499246: cap 0: Start a parallel conjunction 0x251b390, static_id: 2
+11499372: cap 0: Create spark for conjunction: 0x251b390 spark: 0x106
+11499561: cap 0: Start a parallel conjunction 0x251b3f0, static_id: 2
+11499696: cap 0: Create spark for conjunction: 0x251b3f0 spark: 0x107
+11499876: cap 0: Start a parallel conjunction 0x251b450, static_id: 2
+11500042: cap 0: Create spark for conjunction: 0x251b450 spark: 0x108
+11500245: cap 0: Start a parallel conjunction 0x251b4b0, static_id: 2
+11500375: cap 0: Create spark for conjunction: 0x251b4b0 spark: 0x109
+11500555: cap 0: Start a parallel conjunction 0x251b510, static_id: 2
+11500681: cap 0: Create spark for conjunction: 0x251b510 spark: 0x10a
+11500866: cap 0: Start a parallel conjunction 0x251b570, static_id: 2
+11500987: cap 0: Create spark for conjunction: 0x251b570 spark: 0x10b
+11501176: cap 0: Start a parallel conjunction 0x251b5d0, static_id: 2
+11501307: cap 0: Create spark for conjunction: 0x251b5d0 spark: 0x10c
+11501496: cap 0: Start a parallel conjunction 0x251b630, static_id: 2
+11501631: cap 0: Create spark for conjunction: 0x251b630 spark: 0x10d
+11501815: cap 0: Start a parallel conjunction 0x251b690, static_id: 2
+11501937: cap 0: Create spark for conjunction: 0x251b690 spark: 0x10e
+11502135: cap 0: Start a parallel conjunction 0x251b6f0, static_id: 2
+11502274: cap 0: Create spark for conjunction: 0x251b6f0 spark: 0x10f
+11502445: cap 0: Start a parallel conjunction 0x251b750, static_id: 2
+11502567: cap 0: Create spark for conjunction: 0x251b750 spark: 0x110
+11502769: cap 0: Start a parallel conjunction 0x251b7b0, static_id: 2
+11502895: cap 0: Create spark for conjunction: 0x251b7b0 spark: 0x111
+11503075: cap 0: Start a parallel conjunction 0x251b810, static_id: 2
+11503192: cap 0: Create spark for conjunction: 0x251b810 spark: 0x112
+11503377: cap 0: Start a parallel conjunction 0x251b870, static_id: 2
+11503507: cap 0: Create spark for conjunction: 0x251b870 spark: 0x113
+11503687: cap 0: Start a parallel conjunction 0x251b8d0, static_id: 2
+11503818: cap 0: Create spark for conjunction: 0x251b8d0 spark: 0x114
+11504007: cap 0: Start a parallel conjunction 0x251b930, static_id: 2
+11504137: cap 0: Create spark for conjunction: 0x251b930 spark: 0x115
+11504470: cap 0: Start a parallel conjunction 0x251b990, static_id: 2
+11504592: cap 0: Create spark for conjunction: 0x251b990 spark: 0x116
+11504790: cap 0: Start a parallel conjunction 0x251b9f0, static_id: 2
+11505217: cap 0: Create spark for conjunction: 0x251b9f0 spark: 0x117
+11505402: cap 0: Start a parallel conjunction 0x251ba50, static_id: 2
+11505523: cap 0: Create spark for conjunction: 0x251ba50 spark: 0x118
+11505721: cap 0: Start a parallel conjunction 0x251bab0, static_id: 2
+11505852: cap 0: Create spark for conjunction: 0x251bab0 spark: 0x119
+11506041: cap 0: Start a parallel conjunction 0x251bb10, static_id: 2
+11506167: cap 0: Create spark for conjunction: 0x251bb10 spark: 0x11a
+11506369: cap 0: Start a parallel conjunction 0x251bb70, static_id: 2
+11506500: cap 0: Create spark for conjunction: 0x251bb70 spark: 0x11b
+11506689: cap 0: Start a parallel conjunction 0x251bbd0, static_id: 2
+11506810: cap 0: Create spark for conjunction: 0x251bbd0 spark: 0x11c
+11506990: cap 0: Start a parallel conjunction 0x251bc30, static_id: 2
+11507130: cap 0: Create spark for conjunction: 0x251bc30 spark: 0x11d
+11507310: cap 0: Start a parallel conjunction 0x251bc90, static_id: 2
+11507431: cap 0: Create spark for conjunction: 0x251bc90 spark: 0x11e
+11507620: cap 0: Start a parallel conjunction 0x251bcf0, static_id: 2
+11507751: cap 0: Create spark for conjunction: 0x251bcf0 spark: 0x11f
+11507926: cap 0: Start a parallel conjunction 0x251bd50, static_id: 2
+11508052: cap 0: Create spark for conjunction: 0x251bd50 spark: 0x120
+11508237: cap 0: Start a parallel conjunction 0x251bdb0, static_id: 2
+11508363: cap 0: Create spark for conjunction: 0x251bdb0 spark: 0x121
+11508556: cap 0: Start a parallel conjunction 0x251be10, static_id: 2
+11508682: cap 0: Create spark for conjunction: 0x251be10 spark: 0x122
+11508889: cap 0: Start a parallel conjunction 0x251be70, static_id: 2
+11509020: cap 0: Create spark for conjunction: 0x251be70 spark: 0x123
+11509200: cap 0: Start a parallel conjunction 0x251bed0, static_id: 2
+11509326: cap 0: Create spark for conjunction: 0x251bed0 spark: 0x124
+11509510: cap 0: Start a parallel conjunction 0x251bf30, static_id: 2
+11509636: cap 0: Create spark for conjunction: 0x251bf30 spark: 0x125
+11509929: cap 0: Start a parallel conjunction 0x251bf90, static_id: 2
+11510050: cap 0: Create spark for conjunction: 0x251bf90 spark: 0x126
+11510361: cap 0: Start a parallel conjunction 0x251bff0, static_id: 2
+11510496: cap 0: Create spark for conjunction: 0x251bff0 spark: 0x127
+11510685: cap 0: Start a parallel conjunction 0x251c050, static_id: 2
+11510811: cap 0: Create spark for conjunction: 0x251c050 spark: 0x128
+11511000: cap 0: Start a parallel conjunction 0x251c0b0, static_id: 2
+11511126: cap 0: Create spark for conjunction: 0x251c0b0 spark: 0x129
+11511301: cap 0: Start a parallel conjunction 0x251c110, static_id: 2
+11511427: cap 0: Create spark for conjunction: 0x251c110 spark: 0x12a
+11511612: cap 0: Start a parallel conjunction 0x251c170, static_id: 2
+11511733: cap 0: Create spark for conjunction: 0x251c170 spark: 0x12b
+11511918: cap 0: Start a parallel conjunction 0x251c1d0, static_id: 2
+11512039: cap 0: Create spark for conjunction: 0x251c1d0 spark: 0x12c
+11512219: cap 0: Start a parallel conjunction 0x251c230, static_id: 2
+11512345: cap 0: Create spark for conjunction: 0x251c230 spark: 0x12d
+11512530: cap 0: Start a parallel conjunction 0x251c290, static_id: 2
+11512647: cap 0: Create spark for conjunction: 0x251c290 spark: 0x12e
+11512939: cap 0: Start a parallel conjunction 0x251c2f0, static_id: 2
+11513061: cap 0: Create spark for conjunction: 0x251c2f0 spark: 0x12f
+11513232: cap 0: Start a parallel conjunction 0x251c350, static_id: 2
+11513353: cap 0: Create spark for conjunction: 0x251c350 spark: 0x130
+11513538: cap 0: Start a parallel conjunction 0x251c3b0, static_id: 2
+11513664: cap 0: Create spark for conjunction: 0x251c3b0 spark: 0x131
+11513839: cap 0: Start a parallel conjunction 0x251c410, static_id: 2
+11513961: cap 0: Create spark for conjunction: 0x251c410 spark: 0x132
+11514267: cap 0: Start a parallel conjunction 0x251c470, static_id: 2
+11514397: cap 0: Create spark for conjunction: 0x251c470 spark: 0x133
+11514568: cap 0: Start a parallel conjunction 0x251c4d0, static_id: 2
+11514699: cap 0: Create spark for conjunction: 0x251c4d0 spark: 0x134
+11514892: cap 0: Start a parallel conjunction 0x251c530, static_id: 2
+11515027: cap 0: Create spark for conjunction: 0x251c530 spark: 0x135
+11515225: cap 0: Start a parallel conjunction 0x251c590, static_id: 2
+11515351: cap 0: Create spark for conjunction: 0x251c590 spark: 0x136
+11515531: cap 0: Start a parallel conjunction 0x251c5f0, static_id: 2
+11515662: cap 0: Create spark for conjunction: 0x251c5f0 spark: 0x137
+11515846: cap 0: Start a parallel conjunction 0x251c650, static_id: 2
+11515972: cap 0: Create spark for conjunction: 0x251c650 spark: 0x138
+11516175: cap 0: Start a parallel conjunction 0x251c6b0, static_id: 2
+11516296: cap 0: Create spark for conjunction: 0x251c6b0 spark: 0x139
+11516476: cap 0: Start a parallel conjunction 0x251c710, static_id: 2
+11516598: cap 0: Create spark for conjunction: 0x251c710 spark: 0x13a
+11516782: cap 0: Start a parallel conjunction 0x251c770, static_id: 2
+11516908: cap 0: Create spark for conjunction: 0x251c770 spark: 0x13b
+11517093: cap 0: Start a parallel conjunction 0x251c7d0, static_id: 2
+11517214: cap 0: Create spark for conjunction: 0x251c7d0 spark: 0x13c
+11517394: cap 0: Start a parallel conjunction 0x251c830, static_id: 2
+11517529: cap 0: Create spark for conjunction: 0x251c830 spark: 0x13d
+11517705: cap 0: Start a parallel conjunction 0x251c890, static_id: 2
+11517826: cap 0: Create spark for conjunction: 0x251c890 spark: 0x13e
+11518011: cap 0: Start a parallel conjunction 0x251c8f0, static_id: 2
+11518141: cap 0: Create spark for conjunction: 0x251c8f0 spark: 0x13f
+11518317: cap 0: Start a parallel conjunction 0x251c950, static_id: 2
+11518443: cap 0: Create spark for conjunction: 0x251c950 spark: 0x140
+11518627: cap 0: Start a parallel conjunction 0x251c9b0, static_id: 2
+11518758: cap 0: Create spark for conjunction: 0x251c9b0 spark: 0x141
+11518942: cap 0: Start a parallel conjunction 0x251ca10, static_id: 2
+11519068: cap 0: Create spark for conjunction: 0x251ca10 spark: 0x142
+11519257: cap 0: Start a parallel conjunction 0x251ca70, static_id: 2
+11519383: cap 0: Create spark for conjunction: 0x251ca70 spark: 0x143
+11519563: cap 0: Start a parallel conjunction 0x251cad0, static_id: 2
+11519694: cap 0: Create spark for conjunction: 0x251cad0 spark: 0x144
+11519878: cap 0: Start a parallel conjunction 0x251cb30, static_id: 2
+11520009: cap 0: Create spark for conjunction: 0x251cb30 spark: 0x145
+11520198: cap 0: Start a parallel conjunction 0x251cb90, static_id: 2
+11520319: cap 0: Create spark for conjunction: 0x251cb90 spark: 0x146
+11520490: cap 0: Start a parallel conjunction 0x251cbf0, static_id: 2
+11520621: cap 0: Create spark for conjunction: 0x251cbf0 spark: 0x147
+11520801: cap 0: Start a parallel conjunction 0x251cc50, static_id: 2
+11520922: cap 0: Create spark for conjunction: 0x251cc50 spark: 0x148
+11521111: cap 0: Start a parallel conjunction 0x251ccb0, static_id: 2
+11521251: cap 0: Create spark for conjunction: 0x251ccb0 spark: 0x149
+11521422: cap 0: Start a parallel conjunction 0x251cd10, static_id: 2
+11521548: cap 0: Create spark for conjunction: 0x251cd10 spark: 0x14a
+11521741: cap 0: Start a parallel conjunction 0x251cd70, static_id: 2
+11521876: cap 0: Create spark for conjunction: 0x251cd70 spark: 0x14b
+11522065: cap 0: Start a parallel conjunction 0x251cdd0, static_id: 2
+11522187: cap 0: Create spark for conjunction: 0x251cdd0 spark: 0x14c
+11522371: cap 0: Start a parallel conjunction 0x251ce30, static_id: 2
+11522506: cap 0: Create spark for conjunction: 0x251ce30 spark: 0x14d
+11522686: cap 0: Start a parallel conjunction 0x251ce90, static_id: 2
+11522808: cap 0: Create spark for conjunction: 0x251ce90 spark: 0x14e
+11522992: cap 0: Start a parallel conjunction 0x251cef0, static_id: 2
+11523118: cap 0: Create spark for conjunction: 0x251cef0 spark: 0x14f
+11523298: cap 0: Start a parallel conjunction 0x251cf50, static_id: 2
+11523424: cap 0: Create spark for conjunction: 0x251cf50 spark: 0x150
+11523609: cap 0: Start a parallel conjunction 0x251cfb0, static_id: 2
+11523739: cap 0: Create spark for conjunction: 0x251cfb0 spark: 0x151
+11524059: cap 0: Start a parallel conjunction 0x251d010, static_id: 2
+11524180: cap 0: Create spark for conjunction: 0x251d010 spark: 0x152
+11524378: cap 0: Start a parallel conjunction 0x251d070, static_id: 2
+11524518: cap 0: Create spark for conjunction: 0x251d070 spark: 0x153
+11524698: cap 0: Start a parallel conjunction 0x251d0d0, static_id: 2
+11524828: cap 0: Create spark for conjunction: 0x251d0d0 spark: 0x154
+11525013: cap 0: Start a parallel conjunction 0x251d130, static_id: 2
+11525134: cap 0: Create spark for conjunction: 0x251d130 spark: 0x155
+11525319: cap 0: Start a parallel conjunction 0x251d190, static_id: 2
+11525449: cap 0: Create spark for conjunction: 0x251d190 spark: 0x156
+11525625: cap 0: Start a parallel conjunction 0x251d1f0, static_id: 2
+11525760: cap 0: Create spark for conjunction: 0x251d1f0 spark: 0x157
+11525940: cap 0: Start a parallel conjunction 0x251d250, static_id: 2
+11526061: cap 0: Create spark for conjunction: 0x251d250 spark: 0x158
+11526250: cap 0: Start a parallel conjunction 0x251d2b0, static_id: 2
+11526381: cap 0: Create spark for conjunction: 0x251d2b0 spark: 0x159
+11526556: cap 0: Start a parallel conjunction 0x251d310, static_id: 2
+11526678: cap 0: Create spark for conjunction: 0x251d310 spark: 0x15a
+11527038: cap 0: Start a parallel conjunction 0x251d370, static_id: 2
+11527168: cap 0: Create spark for conjunction: 0x251d370 spark: 0x15b
+11527357: cap 0: Start a parallel conjunction 0x251d3d0, static_id: 2
+11527479: cap 0: Create spark for conjunction: 0x251d3d0 spark: 0x15c
+11527659: cap 0: Start a parallel conjunction 0x251d430, static_id: 2
+11527794: cap 0: Create spark for conjunction: 0x251d430 spark: 0x15d
+11527974: cap 0: Start a parallel conjunction 0x251d490, static_id: 2
+11528095: cap 0: Create spark for conjunction: 0x251d490 spark: 0x15e
+11528293: cap 0: Start a parallel conjunction 0x251d4f0, static_id: 2
+11528424: cap 0: Create spark for conjunction: 0x251d4f0 spark: 0x15f
+11528608: cap 0: Start a parallel conjunction 0x251d550, static_id: 2
+11528730: cap 0: Create spark for conjunction: 0x251d550 spark: 0x160
+11528914: cap 0: Start a parallel conjunction 0x251d5b0, static_id: 2
+11529049: cap 0: Create spark for conjunction: 0x251d5b0 spark: 0x161
+11529234: cap 0: Start a parallel conjunction 0x251d610, static_id: 2
+11529355: cap 0: Create spark for conjunction: 0x251d610 spark: 0x162
+11529567: cap 0: Start a parallel conjunction 0x251d670, static_id: 2
+11529693: cap 0: Create spark for conjunction: 0x251d670 spark: 0x163
+11529877: cap 0: Start a parallel conjunction 0x251d6d0, static_id: 2
+11530003: cap 0: Create spark for conjunction: 0x251d6d0 spark: 0x164
+11530197: cap 0: Start a parallel conjunction 0x251d730, static_id: 2
+11530323: cap 0: Create spark for conjunction: 0x251d730 spark: 0x165
+11530512: cap 0: Start a parallel conjunction 0x251d790, static_id: 2
+11530633: cap 0: Create spark for conjunction: 0x251d790 spark: 0x166
+11530809: cap 0: Start a parallel conjunction 0x251d7f0, static_id: 2
+11530944: cap 0: Create spark for conjunction: 0x251d7f0 spark: 0x167
+11531124: cap 0: Start a parallel conjunction 0x251d850, static_id: 2
+11531245: cap 0: Create spark for conjunction: 0x251d850 spark: 0x168
+11531430: cap 0: Start a parallel conjunction 0x251d8b0, static_id: 2
+11531556: cap 0: Create spark for conjunction: 0x251d8b0 spark: 0x169
+11531731: cap 0: Start a parallel conjunction 0x251d910, static_id: 2
+11531853: cap 0: Create spark for conjunction: 0x251d910 spark: 0x16a
+11532033: cap 0: Start a parallel conjunction 0x251d970, static_id: 2
+11532163: cap 0: Create spark for conjunction: 0x251d970 spark: 0x16b
+11532348: cap 0: Start a parallel conjunction 0x251d9d0, static_id: 2
+11532469: cap 0: Create spark for conjunction: 0x251d9d0 spark: 0x16c
+11532649: cap 0: Start a parallel conjunction 0x251da30, static_id: 2
+11532784: cap 0: Create spark for conjunction: 0x251da30 spark: 0x16d
+11532969: cap 0: Start a parallel conjunction 0x251da90, static_id: 2
+11533090: cap 0: Create spark for conjunction: 0x251da90 spark: 0x16e
+11533279: cap 0: Start a parallel conjunction 0x251daf0, static_id: 2
+11533405: cap 0: Create spark for conjunction: 0x251daf0 spark: 0x16f
+11533590: cap 0: Start a parallel conjunction 0x251db50, static_id: 2
+11533711: cap 0: Create spark for conjunction: 0x251db50 spark: 0x170
+11533887: cap 0: Start a parallel conjunction 0x251dbb0, static_id: 2
+11534017: cap 0: Create spark for conjunction: 0x251dbb0 spark: 0x171
+11534202: cap 0: Start a parallel conjunction 0x251dc10, static_id: 2
+11534323: cap 0: Create spark for conjunction: 0x251dc10 spark: 0x172
+11534656: cap 0: Start a parallel conjunction 0x251dc70, static_id: 2
+11534787: cap 0: Create spark for conjunction: 0x251dc70 spark: 0x173
+11534962: cap 0: Start a parallel conjunction 0x251dcd0, static_id: 2
+11535309: cap 0: Create spark for conjunction: 0x251dcd0 spark: 0x174
+11535507: cap 0: Start a parallel conjunction 0x251dd30, static_id: 2
+11535633: cap 0: Create spark for conjunction: 0x251dd30 spark: 0x175
+11535817: cap 0: Start a parallel conjunction 0x251dd90, static_id: 2
+11535939: cap 0: Create spark for conjunction: 0x251dd90 spark: 0x176
+11536114: cap 0: Start a parallel conjunction 0x251ddf0, static_id: 2
+11536249: cap 0: Create spark for conjunction: 0x251ddf0 spark: 0x177
+11536443: cap 0: Start a parallel conjunction 0x251de50, static_id: 2
+11536569: cap 0: Create spark for conjunction: 0x251de50 spark: 0x178
+11536771: cap 0: Start a parallel conjunction 0x251deb0, static_id: 2
+11536902: cap 0: Create spark for conjunction: 0x251deb0 spark: 0x179
+11537091: cap 0: Start a parallel conjunction 0x251df10, static_id: 2
+11537212: cap 0: Create spark for conjunction: 0x251df10 spark: 0x17a
+11537397: cap 0: Start a parallel conjunction 0x251df70, static_id: 2
+11537523: cap 0: Create spark for conjunction: 0x251df70 spark: 0x17b
+11537820: cap 0: Start a parallel conjunction 0x251dfd0, static_id: 2
+11537941: cap 0: Create spark for conjunction: 0x251dfd0 spark: 0x17c
+11538261: cap 0: Start a parallel conjunction 0x251e030, static_id: 2
+11538396: cap 0: Create spark for conjunction: 0x251e030 spark: 0x17d
+11538576: cap 0: Start a parallel conjunction 0x251e090, static_id: 2
+11538697: cap 0: Create spark for conjunction: 0x251e090 spark: 0x17e
+11538882: cap 0: Start a parallel conjunction 0x251e0f0, static_id: 2
+11539012: cap 0: Create spark for conjunction: 0x251e0f0 spark: 0x17f
+11539188: cap 0: Start a parallel conjunction 0x251e150, static_id: 2
+11539314: cap 0: Create spark for conjunction: 0x251e150 spark: 0x180
+11539507: cap 0: Start a parallel conjunction 0x251e1b0, static_id: 2
+11539638: cap 0: Create spark for conjunction: 0x251e1b0 spark: 0x181
+11539822: cap 0: Start a parallel conjunction 0x251e210, static_id: 2
+11539944: cap 0: Create spark for conjunction: 0x251e210 spark: 0x182
+11540137: cap 0: Start a parallel conjunction 0x251e270, static_id: 2
+11540272: cap 0: Create spark for conjunction: 0x251e270 spark: 0x183
+11540448: cap 0: Start a parallel conjunction 0x251e2d0, static_id: 2
+11540614: cap 0: Create spark for conjunction: 0x251e2d0 spark: 0x184
+11540803: cap 0: Start a parallel conjunction 0x251e330, static_id: 2
+11540929: cap 0: Create spark for conjunction: 0x251e330 spark: 0x185
+11541118: cap 0: Start a parallel conjunction 0x251e390, static_id: 2
+11541240: cap 0: Create spark for conjunction: 0x251e390 spark: 0x186
+11541577: cap 0: Start a parallel conjunction 0x251e3f0, static_id: 2
+11541712: cap 0: Create spark for conjunction: 0x251e3f0 spark: 0x187
+11541897: cap 0: Start a parallel conjunction 0x251e450, static_id: 2
+11542059: cap 0: Create spark for conjunction: 0x251e450 spark: 0x188
+11542261: cap 0: Start a parallel conjunction 0x251e4b0, static_id: 2
+11542383: cap 0: Create spark for conjunction: 0x251e4b0 spark: 0x189
+11542558: cap 0: Start a parallel conjunction 0x251e510, static_id: 2
+11542680: cap 0: Create spark for conjunction: 0x251e510 spark: 0x18a
+11542864: cap 0: Start a parallel conjunction 0x251e570, static_id: 2
+11542990: cap 0: Create spark for conjunction: 0x251e570 spark: 0x18b
+11543175: cap 0: Start a parallel conjunction 0x251e5d0, static_id: 2
+11543296: cap 0: Create spark for conjunction: 0x251e5d0 spark: 0x18c
+11543476: cap 0: Start a parallel conjunction 0x251e630, static_id: 2
+11543620: cap 0: Create spark for conjunction: 0x251e630 spark: 0x18d
+11543800: cap 0: Start a parallel conjunction 0x251e690, static_id: 2
+11543922: cap 0: Create spark for conjunction: 0x251e690 spark: 0x18e
+11544111: cap 0: Start a parallel conjunction 0x251e6f0, static_id: 2
+11544241: cap 0: Create spark for conjunction: 0x251e6f0 spark: 0x18f
+11544417: cap 0: Start a parallel conjunction 0x251e750, static_id: 2
+11544547: cap 0: Create spark for conjunction: 0x251e750 spark: 0x190
+11544732: cap 0: Start a parallel conjunction 0x251e7b0, static_id: 2
+11544858: cap 0: Create spark for conjunction: 0x251e7b0 spark: 0x191
+11545042: cap 0: Start a parallel conjunction 0x251e810, static_id: 2
+11545164: cap 0: Create spark for conjunction: 0x251e810 spark: 0x192
+11545353: cap 0: Start a parallel conjunction 0x251e870, static_id: 2
+11545479: cap 0: Create spark for conjunction: 0x251e870 spark: 0x193
+11545659: cap 0: Start a parallel conjunction 0x251e8d0, static_id: 2
+11545785: cap 0: Create spark for conjunction: 0x251e8d0 spark: 0x194
+11545974: cap 0: Start a parallel conjunction 0x251e930, static_id: 2
+11546100: cap 0: Create spark for conjunction: 0x251e930 spark: 0x195
+11546293: cap 0: Start a parallel conjunction 0x251e990, static_id: 2
+11546415: cap 0: Create spark for conjunction: 0x251e990 spark: 0x196
+11546590: cap 0: Start a parallel conjunction 0x251e9f0, static_id: 2
+11546725: cap 0: Create spark for conjunction: 0x251e9f0 spark: 0x197
+11546910: cap 0: Start a parallel conjunction 0x251ea50, static_id: 2
+11547036: cap 0: Create spark for conjunction: 0x251ea50 spark: 0x198
+11547243: cap 0: Start a parallel conjunction 0x251eab0, static_id: 2
+11547378: cap 0: Create spark for conjunction: 0x251eab0 spark: 0x199
+11547562: cap 0: Start a parallel conjunction 0x251eb10, static_id: 2
+11547684: cap 0: Create spark for conjunction: 0x251eb10 spark: 0x19a
+11547868: cap 0: Start a parallel conjunction 0x251eb70, static_id: 2
+11547990: cap 0: Create spark for conjunction: 0x251eb70 spark: 0x19b
+11548174: cap 0: Start a parallel conjunction 0x251ebd0, static_id: 2
+11548296: cap 0: Create spark for conjunction: 0x251ebd0 spark: 0x19c
+11548476: cap 0: Start a parallel conjunction 0x251ec30, static_id: 2
+11548602: cap 0: Create spark for conjunction: 0x251ec30 spark: 0x19d
+11548782: cap 0: Start a parallel conjunction 0x251ec90, static_id: 2
+11548903: cap 0: Create spark for conjunction: 0x251ec90 spark: 0x19e
+11549092: cap 0: Start a parallel conjunction 0x251ecf0, static_id: 2
+11549223: cap 0: Create spark for conjunction: 0x251ecf0 spark: 0x19f
+11549403: cap 0: Start a parallel conjunction 0x251ed50, static_id: 2
+11549524: cap 0: Create spark for conjunction: 0x251ed50 spark: 0x1a0
+11549709: cap 0: Start a parallel conjunction 0x251edb0, static_id: 2
+11549839: cap 0: Create spark for conjunction: 0x251edb0 spark: 0x1a1
+11550019: cap 0: Start a parallel conjunction 0x251ee10, static_id: 2
+11550141: cap 0: Create spark for conjunction: 0x251ee10 spark: 0x1a2
+11550330: cap 0: Start a parallel conjunction 0x251ee70, static_id: 2
+11550465: cap 0: Create spark for conjunction: 0x251ee70 spark: 0x1a3
+11550658: cap 0: Start a parallel conjunction 0x251eed0, static_id: 2
+11550784: cap 0: Create spark for conjunction: 0x251eed0 spark: 0x1a4
+11550982: cap 0: Start a parallel conjunction 0x251ef30, static_id: 2
+11551108: cap 0: Create spark for conjunction: 0x251ef30 spark: 0x1a5
+11551293: cap 0: Start a parallel conjunction 0x251ef90, static_id: 2
+11551419: cap 0: Create spark for conjunction: 0x251ef90 spark: 0x1a6
+11551752: cap 0: Start a parallel conjunction 0x251eff0, static_id: 2
+11551887: cap 0: Create spark for conjunction: 0x251eff0 spark: 0x1a7
+11552076: cap 0: Start a parallel conjunction 0x251f050, static_id: 2
+11552197: cap 0: Create spark for conjunction: 0x251f050 spark: 0x1a8
+11552386: cap 0: Start a parallel conjunction 0x251f0b0, static_id: 2
+11552517: cap 0: Create spark for conjunction: 0x251f0b0 spark: 0x1a9
+11552755: cap 0: Start a parallel conjunction 0x251f110, static_id: 2
+11552886: cap 0: Create spark for conjunction: 0x251f110 spark: 0x1aa
+11553066: cap 0: Start a parallel conjunction 0x251f170, static_id: 2
+11553196: cap 0: Create spark for conjunction: 0x251f170 spark: 0x1ab
+11553390: cap 0: Start a parallel conjunction 0x251f1d0, static_id: 2
+11553511: cap 0: Create spark for conjunction: 0x251f1d0 spark: 0x1ac
+11553696: cap 0: Start a parallel conjunction 0x251f230, static_id: 2
+11553835: cap 0: Create spark for conjunction: 0x251f230 spark: 0x1ad
+11554015: cap 0: Start a parallel conjunction 0x251f290, static_id: 2
+11554146: cap 0: Create spark for conjunction: 0x251f290 spark: 0x1ae
+11554330: cap 0: Start a parallel conjunction 0x251f2f0, static_id: 2
+11554465: cap 0: Create spark for conjunction: 0x251f2f0 spark: 0x1af
+11554645: cap 0: Start a parallel conjunction 0x251f350, static_id: 2
+11554767: cap 0: Create spark for conjunction: 0x251f350 spark: 0x1b0
+11554956: cap 0: Start a parallel conjunction 0x251f3b0, static_id: 2
+11555082: cap 0: Create spark for conjunction: 0x251f3b0 spark: 0x1b1
+11555262: cap 0: Start a parallel conjunction 0x251f410, static_id: 2
+11555383: cap 0: Create spark for conjunction: 0x251f410 spark: 0x1b2
+11555662: cap 0: Start a parallel conjunction 0x251f470, static_id: 2
+11555788: cap 0: Create spark for conjunction: 0x251f470 spark: 0x1b3
+11555964: cap 0: Start a parallel conjunction 0x251f4d0, static_id: 2
+11556090: cap 0: Create spark for conjunction: 0x251f4d0 spark: 0x1b4
+11556270: cap 0: Start a parallel conjunction 0x251f530, static_id: 2
+11556391: cap 0: Create spark for conjunction: 0x251f530 spark: 0x1b5
+11556576: cap 0: Start a parallel conjunction 0x251f590, static_id: 2
+11556697: cap 0: Create spark for conjunction: 0x251f590 spark: 0x1b6
+11556877: cap 0: Start a parallel conjunction 0x251f5f0, static_id: 2
+11557008: cap 0: Create spark for conjunction: 0x251f5f0 spark: 0x1b7
+11557188: cap 0: Start a parallel conjunction 0x251f650, static_id: 2
+11557309: cap 0: Create spark for conjunction: 0x251f650 spark: 0x1b8
+11557503: cap 0: Start a parallel conjunction 0x251f6b0, static_id: 2
+11557638: cap 0: Create spark for conjunction: 0x251f6b0 spark: 0x1b9
+11557818: cap 0: Start a parallel conjunction 0x251f710, static_id: 2
+11557944: cap 0: Create spark for conjunction: 0x251f710 spark: 0x1ba
+11558137: cap 0: Start a parallel conjunction 0x251f770, static_id: 2
+11558268: cap 0: Create spark for conjunction: 0x251f770 spark: 0x1bb
+11558452: cap 0: Start a parallel conjunction 0x251f7d0, static_id: 2
+11558578: cap 0: Create spark for conjunction: 0x251f7d0 spark: 0x1bc
+11558754: cap 0: Start a parallel conjunction 0x251f830, static_id: 2
+11558893: cap 0: Create spark for conjunction: 0x251f830 spark: 0x1bd
+11559069: cap 0: Start a parallel conjunction 0x251f890, static_id: 2
+11559190: cap 0: Create spark for conjunction: 0x251f890 spark: 0x1be
+11559375: cap 0: Start a parallel conjunction 0x251f8f0, static_id: 2
+11559505: cap 0: Create spark for conjunction: 0x251f8f0 spark: 0x1bf
+11559681: cap 0: Start a parallel conjunction 0x251f950, static_id: 2
+11559802: cap 0: Create spark for conjunction: 0x251f950 spark: 0x1c0
+11559982: cap 0: Start a parallel conjunction 0x251f9b0, static_id: 2
+11560099: cap 0: Create spark for conjunction: 0x251f9b0 spark: 0x1c1
+11560279: cap 0: Start a parallel conjunction 0x251fa10, static_id: 2
+11560396: cap 0: Create spark for conjunction: 0x251fa10 spark: 0x1c2
+11560581: cap 0: Start a parallel conjunction 0x251fa70, static_id: 2
+11560711: cap 0: Create spark for conjunction: 0x251fa70 spark: 0x1c3
+11560896: cap 0: Start a parallel conjunction 0x251fad0, static_id: 2
+11561026: cap 0: Create spark for conjunction: 0x251fad0 spark: 0x1c4
+11561215: cap 0: Start a parallel conjunction 0x251fb30, static_id: 2
+11561350: cap 0: Create spark for conjunction: 0x251fb30 spark: 0x1c5
+11561539: cap 0: Start a parallel conjunction 0x251fb90, static_id: 2
+11561665: cap 0: Create spark for conjunction: 0x251fb90 spark: 0x1c6
+11561836: cap 0: Start a parallel conjunction 0x251fbf0, static_id: 2
+11561971: cap 0: Create spark for conjunction: 0x251fbf0 spark: 0x1c7
+11562151: cap 0: Start a parallel conjunction 0x251fc50, static_id: 2
+11562277: cap 0: Create spark for conjunction: 0x251fc50 spark: 0x1c8
+11562466: cap 0: Start a parallel conjunction 0x251fcb0, static_id: 2
+11562606: cap 0: Create spark for conjunction: 0x251fcb0 spark: 0x1c9
+11562781: cap 0: Start a parallel conjunction 0x251fd10, static_id: 2
+11562907: cap 0: Create spark for conjunction: 0x251fd10 spark: 0x1ca
+11563087: cap 0: Start a parallel conjunction 0x251fd70, static_id: 2
+11563209: cap 0: Create spark for conjunction: 0x251fd70 spark: 0x1cb
+11563402: cap 0: Start a parallel conjunction 0x251fdd0, static_id: 2
+11563524: cap 0: Create spark for conjunction: 0x251fdd0 spark: 0x1cc
+11563713: cap 0: Start a parallel conjunction 0x251fe30, static_id: 2
+11563848: cap 0: Create spark for conjunction: 0x251fe30 spark: 0x1cd
+11564032: cap 0: Start a parallel conjunction 0x251fe90, static_id: 2
+11564154: cap 0: Create spark for conjunction: 0x251fe90 spark: 0x1ce
+11564338: cap 0: Start a parallel conjunction 0x251fef0, static_id: 2
+11564469: cap 0: Create spark for conjunction: 0x251fef0 spark: 0x1cf
+11564640: cap 0: Start a parallel conjunction 0x251ff50, static_id: 2
+11564874: cap 0: Create spark for conjunction: 0x251ff50 spark: 0x1d0
+11565175: cap 0: Start a parallel conjunction 0x251ffb0, static_id: 2
+11565301: cap 0: Create spark for conjunction: 0x251ffb0 spark: 0x1d1
+11565711: cap 0: Start a parallel conjunction 0x2520010, static_id: 2
+11565832: cap 0: Create spark for conjunction: 0x2520010 spark: 0x1d2
+11566026: cap 0: Start a parallel conjunction 0x2520070, static_id: 2
+11566152: cap 0: Create spark for conjunction: 0x2520070 spark: 0x1d3
+11566327: cap 0: Start a parallel conjunction 0x25200d0, static_id: 2
+11566453: cap 0: Create spark for conjunction: 0x25200d0 spark: 0x1d4
+11566638: cap 0: Start a parallel conjunction 0x2520130, static_id: 2
+11566768: cap 0: Create spark for conjunction: 0x2520130 spark: 0x1d5
+11566966: cap 0: Start a parallel conjunction 0x2520190, static_id: 2
+11567088: cap 0: Create spark for conjunction: 0x2520190 spark: 0x1d6
+11567461: cap 0: Start a parallel conjunction 0x25201f0, static_id: 2
+11567596: cap 0: Create spark for conjunction: 0x25201f0 spark: 0x1d7
+11567781: cap 0: Start a parallel conjunction 0x2520250, static_id: 2
+11567907: cap 0: Create spark for conjunction: 0x2520250 spark: 0x1d8
+11568105: cap 0: Start a parallel conjunction 0x25202b0, static_id: 2
+11568226: cap 0: Create spark for conjunction: 0x25202b0 spark: 0x1d9
+11568397: cap 0: Start a parallel conjunction 0x2520310, static_id: 2
+11568523: cap 0: Create spark for conjunction: 0x2520310 spark: 0x1da
+11568708: cap 0: Start a parallel conjunction 0x2520370, static_id: 2
+11568834: cap 0: Create spark for conjunction: 0x2520370 spark: 0x1db
+11569018: cap 0: Start a parallel conjunction 0x25203d0, static_id: 2
+11569140: cap 0: Create spark for conjunction: 0x25203d0 spark: 0x1dc
+11569320: cap 0: Start a parallel conjunction 0x2520430, static_id: 2
+11569455: cap 0: Create spark for conjunction: 0x2520430 spark: 0x1dd
+11569630: cap 0: Start a parallel conjunction 0x2520490, static_id: 2
+11569752: cap 0: Create spark for conjunction: 0x2520490 spark: 0x1de
+11569936: cap 0: Start a parallel conjunction 0x25204f0, static_id: 2
+11570067: cap 0: Create spark for conjunction: 0x25204f0 spark: 0x1df
+11570242: cap 0: Start a parallel conjunction 0x2520550, static_id: 2
+11570364: cap 0: Create spark for conjunction: 0x2520550 spark: 0x1e0
+11570544: cap 0: Start a parallel conjunction 0x25205b0, static_id: 2
+11570670: cap 0: Create spark for conjunction: 0x25205b0 spark: 0x1e1
+11570850: cap 0: Start a parallel conjunction 0x2520610, static_id: 2
+11570971: cap 0: Create spark for conjunction: 0x2520610 spark: 0x1e2
+11571160: cap 0: Start a parallel conjunction 0x2520670, static_id: 2
+11571295: cap 0: Create spark for conjunction: 0x2520670 spark: 0x1e3
+11571466: cap 0: Start a parallel conjunction 0x25206d0, static_id: 2
+11571601: cap 0: Create spark for conjunction: 0x25206d0 spark: 0x1e4
+11571795: cap 0: Start a parallel conjunction 0x2520730, static_id: 2
+11571921: cap 0: Create spark for conjunction: 0x2520730 spark: 0x1e5
+11572114: cap 0: Start a parallel conjunction 0x2520790, static_id: 2
+11572240: cap 0: Create spark for conjunction: 0x2520790 spark: 0x1e6
+11572416: cap 0: Start a parallel conjunction 0x25207f0, static_id: 2
+11572546: cap 0: Create spark for conjunction: 0x25207f0 spark: 0x1e7
+11572735: cap 0: Start a parallel conjunction 0x2520850, static_id: 2
+11572861: cap 0: Create spark for conjunction: 0x2520850 spark: 0x1e8
+11573055: cap 0: Start a parallel conjunction 0x25208b0, static_id: 2
+11573190: cap 0: Create spark for conjunction: 0x25208b0 spark: 0x1e9
+11573365: cap 0: Start a parallel conjunction 0x2520910, static_id: 2
+11573487: cap 0: Create spark for conjunction: 0x2520910 spark: 0x1ea
+11573676: cap 0: Start a parallel conjunction 0x2520970, static_id: 2
+11573802: cap 0: Create spark for conjunction: 0x2520970 spark: 0x1eb
+11573986: cap 0: Start a parallel conjunction 0x25209d0, static_id: 2
+11574112: cap 0: Create spark for conjunction: 0x25209d0 spark: 0x1ec
+11574288: cap 0: Start a parallel conjunction 0x2520a30, static_id: 2
+11574427: cap 0: Create spark for conjunction: 0x2520a30 spark: 0x1ed
+11574603: cap 0: Start a parallel conjunction 0x2520a90, static_id: 2
+11574724: cap 0: Create spark for conjunction: 0x2520a90 spark: 0x1ee
+11574909: cap 0: Start a parallel conjunction 0x2520af0, static_id: 2
+11575039: cap 0: Create spark for conjunction: 0x2520af0 spark: 0x1ef
+11575219: cap 0: Start a parallel conjunction 0x2520b50, static_id: 2
+11575341: cap 0: Create spark for conjunction: 0x2520b50 spark: 0x1f0
+11575521: cap 0: Start a parallel conjunction 0x2520bb0, static_id: 2
+11575647: cap 0: Create spark for conjunction: 0x2520bb0 spark: 0x1f1
+11575827: cap 0: Start a parallel conjunction 0x2520c10, static_id: 2
+11575948: cap 0: Create spark for conjunction: 0x2520c10 spark: 0x1f2
+11576137: cap 0: Start a parallel conjunction 0x2520c70, static_id: 2
+11576277: cap 0: Create spark for conjunction: 0x2520c70 spark: 0x1f3
+11576452: cap 0: Start a parallel conjunction 0x2520cd0, static_id: 2
+11576578: cap 0: Create spark for conjunction: 0x2520cd0 spark: 0x1f4
+11576772: cap 0: Start a parallel conjunction 0x2520d30, static_id: 2
+11576898: cap 0: Create spark for conjunction: 0x2520d30 spark: 0x1f5
+11577087: cap 0: Start a parallel conjunction 0x2520d90, static_id: 2
+11577208: cap 0: Create spark for conjunction: 0x2520d90 spark: 0x1f6
+11577393: cap 0: Start a parallel conjunction 0x2520df0, static_id: 2
+11577523: cap 0: Create spark for conjunction: 0x2520df0 spark: 0x1f7
+11577712: cap 0: Start a parallel conjunction 0x2520e50, static_id: 2
+11577834: cap 0: Create spark for conjunction: 0x2520e50 spark: 0x1f8
+11578032: cap 0: Start a parallel conjunction 0x2520eb0, static_id: 2
+11578153: cap 0: Create spark for conjunction: 0x2520eb0 spark: 0x1f9
+11578324: cap 0: Start a parallel conjunction 0x2520f10, static_id: 2
+11578450: cap 0: Create spark for conjunction: 0x2520f10 spark: 0x1fa
+11578635: cap 0: Start a parallel conjunction 0x2520f70, static_id: 2
+11578765: cap 0: Create spark for conjunction: 0x2520f70 spark: 0x1fb
+11579089: cap 0: Start a parallel conjunction 0x2520fd0, static_id: 2
+11579211: cap 0: Create spark for conjunction: 0x2520fd0 spark: 0x1fc
+11579530: cap 0: Start a parallel conjunction 0x2521030, static_id: 2
+11579670: cap 0: Create spark for conjunction: 0x2521030 spark: 0x1fd
+11579850: cap 0: Start a parallel conjunction 0x2521090, static_id: 2
+11579971: cap 0: Create spark for conjunction: 0x2521090 spark: 0x1fe
+11580160: cap 0: Start a parallel conjunction 0x25210f0, static_id: 2
+11580291: cap 0: Create spark for conjunction: 0x25210f0 spark: 0x1ff
+11580466: cap 0: Start a parallel conjunction 0x2521150, static_id: 2
+11580588: cap 0: Create spark for conjunction: 0x2521150 spark: 0x200
+11580772: cap 0: Start a parallel conjunction 0x25211b0, static_id: 2
+11625201: cap 1: Trying to steal a spark
+11626915: cap 1: stealing a spark from cap 0
+11631217: cap 0: Create spark for conjunction: 0x25211b0 spark: 0x201
+11631456: cap 0: Start a parallel conjunction 0x2521210, static_id: 2
+11631586: cap 0: Create spark for conjunction: 0x2521210 spark: 0x202
+11631789: cap 0: Start a parallel conjunction 0x2521270, static_id: 2
+11631924: cap 0: Create spark for conjunction: 0x2521270 spark: 0x203
+11632104: cap 0: Start a parallel conjunction 0x25212d0, static_id: 2
+11632243: cap 0: Create spark for conjunction: 0x25212d0 spark: 0x204
+11632437: cap 0: Start a parallel conjunction 0x2521330, static_id: 2
+11632567: cap 0: Create spark for conjunction: 0x2521330 spark: 0x205
+11632756: cap 0: Start a parallel conjunction 0x2521390, static_id: 2
+11632882: cap 0: Create spark for conjunction: 0x2521390 spark: 0x206
+11633062: cap 0: Start a parallel conjunction 0x25213f0, static_id: 2
+11633206: cap 0: Create spark for conjunction: 0x25213f0 spark: 0x207
+11633395: cap 0: Start a parallel conjunction 0x2521450, static_id: 2
+11633526: cap 0: Create spark for conjunction: 0x2521450 spark: 0x208
+11633737: cap 0: Start a parallel conjunction 0x25214b0, static_id: 2
+11633872: cap 0: Create spark for conjunction: 0x25214b0 spark: 0x209
+11634057: cap 0: Start a parallel conjunction 0x2521510, static_id: 2
+11634183: cap 0: Create spark for conjunction: 0x2521510 spark: 0x20a
+11634381: cap 0: Start a parallel conjunction 0x2521570, static_id: 2
+11634511: cap 0: Create spark for conjunction: 0x2521570 spark: 0x20b
+11634705: cap 0: Start a parallel conjunction 0x25215d0, static_id: 2
+11634831: cap 0: Create spark for conjunction: 0x25215d0 spark: 0x20c
+11635015: cap 0: Start a parallel conjunction 0x2521630, static_id: 2
+11635159: cap 0: Create spark for conjunction: 0x2521630 spark: 0x20d
+11635344: cap 0: Start a parallel conjunction 0x2521690, static_id: 2
+11635465: cap 0: Create spark for conjunction: 0x2521690 spark: 0x20e
+11635659: cap 0: Start a parallel conjunction 0x25216f0, static_id: 2
+11635789: cap 0: Create spark for conjunction: 0x25216f0 spark: 0x20f
+11636037: cap 0: Start a parallel conjunction 0x2521750, static_id: 2
+11636158: cap 0: Create spark for conjunction: 0x2521750 spark: 0x210
+11636343: cap 0: Start a parallel conjunction 0x25217b0, static_id: 2
+11636473: cap 0: Create spark for conjunction: 0x25217b0 spark: 0x211
+11636649: cap 0: Start a parallel conjunction 0x2521810, static_id: 2
+11636770: cap 0: Create spark for conjunction: 0x2521810 spark: 0x212
+11636964: cap 0: Start a parallel conjunction 0x2521870, static_id: 2
+11637099: cap 0: Create spark for conjunction: 0x2521870 spark: 0x213
+11637283: cap 0: Start a parallel conjunction 0x25218d0, static_id: 2
+11637409: cap 0: Create spark for conjunction: 0x25218d0 spark: 0x214
+11637589: cap 0: Start a parallel conjunction 0x2521930, static_id: 2
+11637729: cap 0: Create spark for conjunction: 0x2521930 spark: 0x215
+11637931: cap 0: Start a parallel conjunction 0x2521990, static_id: 2
+11638062: cap 0: Create spark for conjunction: 0x2521990 spark: 0x216
+11638246: cap 0: Start a parallel conjunction 0x25219f0, static_id: 2
+11638377: cap 0: Create spark for conjunction: 0x25219f0 spark: 0x217
+11638845: cap 0: Start a parallel conjunction 0x2521a50, static_id: 2
+11638971: cap 0: Create spark for conjunction: 0x2521a50 spark: 0x218
+11639173: cap 0: Start a parallel conjunction 0x2521ab0, static_id: 2
+11639304: cap 0: Create spark for conjunction: 0x2521ab0 spark: 0x219
+11639488: cap 0: Start a parallel conjunction 0x2521b10, static_id: 2
+11639614: cap 0: Create spark for conjunction: 0x2521b10 spark: 0x21a
+11639799: cap 0: Start a parallel conjunction 0x2521b70, static_id: 2
+11639929: cap 0: Create spark for conjunction: 0x2521b70 spark: 0x21b
+11640118: cap 0: Start a parallel conjunction 0x2521bd0, static_id: 2
+11640249: cap 0: Create spark for conjunction: 0x2521bd0 spark: 0x21c
+11640438: cap 0: Start a parallel conjunction 0x2521c30, static_id: 2
+11640573: cap 0: Create spark for conjunction: 0x2521c30 spark: 0x21d
+11640753: cap 0: Start a parallel conjunction 0x2521c90, static_id: 2
+11640874: cap 0: Create spark for conjunction: 0x2521c90 spark: 0x21e
+11641063: cap 0: Start a parallel conjunction 0x2521cf0, static_id: 2
+11641194: cap 0: Create spark for conjunction: 0x2521cf0 spark: 0x21f
+11641374: cap 0: Start a parallel conjunction 0x2521d50, static_id: 2
+11641495: cap 0: Create spark for conjunction: 0x2521d50 spark: 0x220
+11641675: cap 0: Start a parallel conjunction 0x2521db0, static_id: 2
+11641810: cap 0: Create spark for conjunction: 0x2521db0 spark: 0x221
+11641990: cap 0: Start a parallel conjunction 0x2521e10, static_id: 2
+11642121: cap 0: Create spark for conjunction: 0x2521e10 spark: 0x222
+11642305: cap 0: Start a parallel conjunction 0x2521e70, static_id: 2
+11642436: cap 0: Create spark for conjunction: 0x2521e70 spark: 0x223
+11642616: cap 0: Start a parallel conjunction 0x2521ed0, static_id: 2
+11642742: cap 0: Create spark for conjunction: 0x2521ed0 spark: 0x224
+11642926: cap 0: Start a parallel conjunction 0x2521f30, static_id: 2
+11643057: cap 0: Create spark for conjunction: 0x2521f30 spark: 0x225
+11643241: cap 0: Start a parallel conjunction 0x2521f90, static_id: 2
+11643367: cap 0: Create spark for conjunction: 0x2521f90 spark: 0x226
+11643691: cap 0: Start a parallel conjunction 0x2521ff0, static_id: 2
+11643826: cap 0: Create spark for conjunction: 0x2521ff0 spark: 0x227
+11644011: cap 0: Start a parallel conjunction 0x2522050, static_id: 2
+11644137: cap 0: Create spark for conjunction: 0x2522050 spark: 0x228
+11644335: cap 0: Start a parallel conjunction 0x25220b0, static_id: 2
+11644461: cap 0: Create spark for conjunction: 0x25220b0 spark: 0x229
+11644645: cap 0: Start a parallel conjunction 0x2522110, static_id: 2
+11644771: cap 0: Create spark for conjunction: 0x2522110 spark: 0x22a
+11644960: cap 0: Start a parallel conjunction 0x2522170, static_id: 2
+11645100: cap 0: Create spark for conjunction: 0x2522170 spark: 0x22b
+11645293: cap 0: Start a parallel conjunction 0x25221d0, static_id: 2
+11645419: cap 0: Create spark for conjunction: 0x25221d0 spark: 0x22c
+11645599: cap 0: Start a parallel conjunction 0x2522230, static_id: 2
+11646090: cap 0: Create spark for conjunction: 0x2522230 spark: 0x22d
+11646274: cap 0: Start a parallel conjunction 0x2522290, static_id: 2
+11646391: cap 0: Create spark for conjunction: 0x2522290 spark: 0x22e
+11646841: cap 0: Start a parallel conjunction 0x25222f0, static_id: 2
+11646972: cap 0: Create spark for conjunction: 0x25222f0 spark: 0x22f
+11647147: cap 0: Start a parallel conjunction 0x2522350, static_id: 2
+11647269: cap 0: Create spark for conjunction: 0x2522350 spark: 0x230
+11647453: cap 0: Start a parallel conjunction 0x25223b0, static_id: 2
+11647579: cap 0: Create spark for conjunction: 0x25223b0 spark: 0x231
+11647759: cap 0: Start a parallel conjunction 0x2522410, static_id: 2
+11647881: cap 0: Create spark for conjunction: 0x2522410 spark: 0x232
+11648070: cap 0: Start a parallel conjunction 0x2522470, static_id: 2
+11648196: cap 0: Create spark for conjunction: 0x2522470 spark: 0x233
+11648380: cap 0: Start a parallel conjunction 0x25224d0, static_id: 2
+11648506: cap 0: Create spark for conjunction: 0x25224d0 spark: 0x234
+11648691: cap 0: Start a parallel conjunction 0x2522530, static_id: 2
+11648826: cap 0: Create spark for conjunction: 0x2522530 spark: 0x235
+11649024: cap 0: Start a parallel conjunction 0x2522590, static_id: 2
+11649150: cap 0: Create spark for conjunction: 0x2522590 spark: 0x236
+11649339: cap 0: Start a parallel conjunction 0x25225f0, static_id: 2
+11649483: cap 0: Create spark for conjunction: 0x25225f0 spark: 0x237
+11649672: cap 0: Start a parallel conjunction 0x2522650, static_id: 2
+11649793: cap 0: Create spark for conjunction: 0x2522650 spark: 0x238
+11649991: cap 0: Start a parallel conjunction 0x25226b0, static_id: 2
+11650117: cap 0: Create spark for conjunction: 0x25226b0 spark: 0x239
+11650302: cap 0: Start a parallel conjunction 0x2522710, static_id: 2
+11650428: cap 0: Create spark for conjunction: 0x2522710 spark: 0x23a
+11650612: cap 0: Start a parallel conjunction 0x2522770, static_id: 2
+11650738: cap 0: Create spark for conjunction: 0x2522770 spark: 0x23b
+11650936: cap 0: Start a parallel conjunction 0x25227d0, static_id: 2
+11651058: cap 0: Create spark for conjunction: 0x25227d0 spark: 0x23c
+11651247: cap 0: Start a parallel conjunction 0x2522830, static_id: 2
+11651386: cap 0: Create spark for conjunction: 0x2522830 spark: 0x23d
+11651562: cap 0: Start a parallel conjunction 0x2522890, static_id: 2
+11651688: cap 0: Create spark for conjunction: 0x2522890 spark: 0x23e
+11651877: cap 0: Start a parallel conjunction 0x25228f0, static_id: 2
+11652007: cap 0: Create spark for conjunction: 0x25228f0 spark: 0x23f
+11652183: cap 0: Start a parallel conjunction 0x2522950, static_id: 2
+11652304: cap 0: Create spark for conjunction: 0x2522950 spark: 0x240
+11652660: cap 0: Start a parallel conjunction 0x25229b0, static_id: 2
+11652786: cap 0: Create spark for conjunction: 0x25229b0 spark: 0x241
+11652966: cap 0: Start a parallel conjunction 0x2522a10, static_id: 2
+11653087: cap 0: Create spark for conjunction: 0x2522a10 spark: 0x242
+11653276: cap 0: Start a parallel conjunction 0x2522a70, static_id: 2
+11653402: cap 0: Create spark for conjunction: 0x2522a70 spark: 0x243
+11653587: cap 0: Start a parallel conjunction 0x2522ad0, static_id: 2
+11653713: cap 0: Create spark for conjunction: 0x2522ad0 spark: 0x244
+11653897: cap 0: Start a parallel conjunction 0x2522b30, static_id: 2
+11654028: cap 0: Create spark for conjunction: 0x2522b30 spark: 0x245
+11654221: cap 0: Start a parallel conjunction 0x2522b90, static_id: 2
+11654347: cap 0: Create spark for conjunction: 0x2522b90 spark: 0x246
+11654532: cap 0: Start a parallel conjunction 0x2522bf0, static_id: 2
+11654676: cap 0: Create spark for conjunction: 0x2522bf0 spark: 0x247
+11654865: cap 0: Start a parallel conjunction 0x2522c50, static_id: 2
+11654986: cap 0: Create spark for conjunction: 0x2522c50 spark: 0x248
+11655189: cap 0: Start a parallel conjunction 0x2522cb0, static_id: 2
+11655328: cap 0: Create spark for conjunction: 0x2522cb0 spark: 0x249
+11655504: cap 0: Start a parallel conjunction 0x2522d10, static_id: 2
+11655630: cap 0: Create spark for conjunction: 0x2522d10 spark: 0x24a
+11655828: cap 0: Start a parallel conjunction 0x2522d70, static_id: 2
+11655958: cap 0: Create spark for conjunction: 0x2522d70 spark: 0x24b
+11656152: cap 0: Start a parallel conjunction 0x2522dd0, static_id: 2
+11656278: cap 0: Create spark for conjunction: 0x2522dd0 spark: 0x24c
+11656462: cap 0: Start a parallel conjunction 0x2522e30, static_id: 2
+11656602: cap 0: Create spark for conjunction: 0x2522e30 spark: 0x24d
+11656786: cap 0: Start a parallel conjunction 0x2522e90, static_id: 2
+11656908: cap 0: Create spark for conjunction: 0x2522e90 spark: 0x24e
+11657097: cap 0: Start a parallel conjunction 0x2522ef0, static_id: 2
+11657227: cap 0: Create spark for conjunction: 0x2522ef0 spark: 0x24f
+11657407: cap 0: Start a parallel conjunction 0x2522f50, static_id: 2
+11657524: cap 0: Create spark for conjunction: 0x2522f50 spark: 0x250
+11657857: cap 0: Start a parallel conjunction 0x2522fb0, static_id: 2
+11657983: cap 0: Create spark for conjunction: 0x2522fb0 spark: 0x251
+11658172: cap 0: Start a parallel conjunction 0x2523010, static_id: 2
+11658294: cap 0: Create spark for conjunction: 0x2523010 spark: 0x252
+11658487: cap 0: Start a parallel conjunction 0x2523070, static_id: 2
+11658618: cap 0: Create spark for conjunction: 0x2523070 spark: 0x253
+11658802: cap 0: Start a parallel conjunction 0x25230d0, static_id: 2
+11658933: cap 0: Create spark for conjunction: 0x25230d0 spark: 0x254
+11659126: cap 0: Start a parallel conjunction 0x2523130, static_id: 2
+11659252: cap 0: Create spark for conjunction: 0x2523130 spark: 0x255
+11659446: cap 0: Start a parallel conjunction 0x2523190, static_id: 2
+11659567: cap 0: Create spark for conjunction: 0x2523190 spark: 0x256
+11659752: cap 0: Start a parallel conjunction 0x25231f0, static_id: 2
+11659896: cap 0: Create spark for conjunction: 0x25231f0 spark: 0x257
+11660076: cap 0: Start a parallel conjunction 0x2523250, static_id: 2
+11660202: cap 0: Create spark for conjunction: 0x2523250 spark: 0x258
+11660395: cap 0: Start a parallel conjunction 0x25232b0, static_id: 2
+11660530: cap 0: Create spark for conjunction: 0x25232b0 spark: 0x259
+11660710: cap 0: Start a parallel conjunction 0x2523310, static_id: 2
+11660832: cap 0: Create spark for conjunction: 0x2523310 spark: 0x25a
+11661183: cap 0: Start a parallel conjunction 0x2523370, static_id: 2
+11661313: cap 0: Create spark for conjunction: 0x2523370 spark: 0x25b
+11661507: cap 0: Start a parallel conjunction 0x25233d0, static_id: 2
+11661633: cap 0: Create spark for conjunction: 0x25233d0 spark: 0x25c
+11661813: cap 0: Start a parallel conjunction 0x2523430, static_id: 2
+11661952: cap 0: Create spark for conjunction: 0x2523430 spark: 0x25d
+11662132: cap 0: Start a parallel conjunction 0x2523490, static_id: 2
+11662254: cap 0: Create spark for conjunction: 0x2523490 spark: 0x25e
+11662447: cap 0: Start a parallel conjunction 0x25234f0, static_id: 2
+11662573: cap 0: Create spark for conjunction: 0x25234f0 spark: 0x25f
+11662753: cap 0: Start a parallel conjunction 0x2523550, static_id: 2
+11662875: cap 0: Create spark for conjunction: 0x2523550 spark: 0x260
+11663059: cap 0: Start a parallel conjunction 0x25235b0, static_id: 2
+11663190: cap 0: Create spark for conjunction: 0x25235b0 spark: 0x261
+11663374: cap 0: Start a parallel conjunction 0x2523610, static_id: 2
+11663500: cap 0: Create spark for conjunction: 0x2523610 spark: 0x262
+11663689: cap 0: Start a parallel conjunction 0x2523670, static_id: 2
+11663824: cap 0: Create spark for conjunction: 0x2523670 spark: 0x263
+11664018: cap 0: Start a parallel conjunction 0x25236d0, static_id: 2
+11664157: cap 0: Create spark for conjunction: 0x25236d0 spark: 0x264
+11664346: cap 0: Start a parallel conjunction 0x2523730, static_id: 2
+11664481: cap 0: Create spark for conjunction: 0x2523730 spark: 0x265
+11664675: cap 0: Start a parallel conjunction 0x2523790, static_id: 2
+11664801: cap 0: Create spark for conjunction: 0x2523790 spark: 0x266
+11664985: cap 0: Start a parallel conjunction 0x25237f0, static_id: 2
+11665116: cap 0: Create spark for conjunction: 0x25237f0 spark: 0x267
+11665300: cap 0: Start a parallel conjunction 0x2523850, static_id: 2
+11665422: cap 0: Create spark for conjunction: 0x2523850 spark: 0x268
+11665611: cap 0: Start a parallel conjunction 0x25238b0, static_id: 2
+11665741: cap 0: Create spark for conjunction: 0x25238b0 spark: 0x269
+11665921: cap 0: Start a parallel conjunction 0x2523910, static_id: 2
+11666047: cap 0: Create spark for conjunction: 0x2523910 spark: 0x26a
+11666232: cap 0: Start a parallel conjunction 0x2523970, static_id: 2
+11666367: cap 0: Create spark for conjunction: 0x2523970 spark: 0x26b
+11666556: cap 0: Start a parallel conjunction 0x25239d0, static_id: 2
+11666677: cap 0: Create spark for conjunction: 0x25239d0 spark: 0x26c
+11666862: cap 0: Start a parallel conjunction 0x2523a30, static_id: 2
+11666997: cap 0: Create spark for conjunction: 0x2523a30 spark: 0x26d
+11667172: cap 0: Start a parallel conjunction 0x2523a90, static_id: 2
+11667294: cap 0: Create spark for conjunction: 0x2523a90 spark: 0x26e
+11667483: cap 0: Start a parallel conjunction 0x2523af0, static_id: 2
+11667609: cap 0: Create spark for conjunction: 0x2523af0 spark: 0x26f
+11667793: cap 0: Start a parallel conjunction 0x2523b50, static_id: 2
+11667915: cap 0: Create spark for conjunction: 0x2523b50 spark: 0x270
+11668099: cap 0: Start a parallel conjunction 0x2523bb0, static_id: 2
+11668252: cap 0: Create spark for conjunction: 0x2523bb0 spark: 0x271
+11668432: cap 0: Start a parallel conjunction 0x2523c10, static_id: 2
+11668554: cap 0: Create spark for conjunction: 0x2523c10 spark: 0x272
+11668747: cap 0: Start a parallel conjunction 0x2523c70, static_id: 2
+11668878: cap 0: Create spark for conjunction: 0x2523c70 spark: 0x273
+11669058: cap 0: Start a parallel conjunction 0x2523cd0, static_id: 2
+11669193: cap 0: Create spark for conjunction: 0x2523cd0 spark: 0x274
+11669391: cap 0: Start a parallel conjunction 0x2523d30, static_id: 2
+11669521: cap 0: Create spark for conjunction: 0x2523d30 spark: 0x275
+11669710: cap 0: Start a parallel conjunction 0x2523d90, static_id: 2
+11669836: cap 0: Create spark for conjunction: 0x2523d90 spark: 0x276
+11670021: cap 0: Start a parallel conjunction 0x2523df0, static_id: 2
+11670160: cap 0: Create spark for conjunction: 0x2523df0 spark: 0x277
+11670340: cap 0: Start a parallel conjunction 0x2523e50, static_id: 2
+11670466: cap 0: Create spark for conjunction: 0x2523e50 spark: 0x278
+11670660: cap 0: Start a parallel conjunction 0x2523eb0, static_id: 2
+11670790: cap 0: Create spark for conjunction: 0x2523eb0 spark: 0x279
+11670970: cap 0: Start a parallel conjunction 0x2523f10, static_id: 2
+11671096: cap 0: Create spark for conjunction: 0x2523f10 spark: 0x27a
+11671281: cap 0: Start a parallel conjunction 0x2523f70, static_id: 2
+11671411: cap 0: Create spark for conjunction: 0x2523f70 spark: 0x27b
+11671744: cap 0: Start a parallel conjunction 0x2523fd0, static_id: 2
+11671870: cap 0: Create spark for conjunction: 0x2523fd0 spark: 0x27c
+11672298: cap 0: Start a parallel conjunction 0x2524030, static_id: 2
+11672446: cap 0: Create spark for conjunction: 0x2524030 spark: 0x27d
+11672631: cap 0: Start a parallel conjunction 0x2524090, static_id: 2
+11672752: cap 0: Create spark for conjunction: 0x2524090 spark: 0x27e
+11672941: cap 0: Start a parallel conjunction 0x25240f0, static_id: 2
+11673076: cap 0: Create spark for conjunction: 0x25240f0 spark: 0x27f
+11673256: cap 0: Start a parallel conjunction 0x2524150, static_id: 2
+11673382: cap 0: Create spark for conjunction: 0x2524150 spark: 0x280
+11673567: cap 0: Start a parallel conjunction 0x25241b0, static_id: 2
+11673697: cap 0: Create spark for conjunction: 0x25241b0 spark: 0x281
+11673873: cap 0: Start a parallel conjunction 0x2524210, static_id: 2
+11673994: cap 0: Create spark for conjunction: 0x2524210 spark: 0x282
+11674183: cap 0: Start a parallel conjunction 0x2524270, static_id: 2
+11674318: cap 0: Create spark for conjunction: 0x2524270 spark: 0x283
+11674503: cap 0: Start a parallel conjunction 0x25242d0, static_id: 2
+11674674: cap 0: Create spark for conjunction: 0x25242d0 spark: 0x284
+11674867: cap 0: Start a parallel conjunction 0x2524330, static_id: 2
+11675002: cap 0: Create spark for conjunction: 0x2524330 spark: 0x285
+11675196: cap 0: Start a parallel conjunction 0x2524390, static_id: 2
+11675317: cap 0: Create spark for conjunction: 0x2524390 spark: 0x286
+11675493: cap 0: Start a parallel conjunction 0x25243f0, static_id: 2
+11675632: cap 0: Create spark for conjunction: 0x25243f0 spark: 0x287
+11675817: cap 0: Start a parallel conjunction 0x2524450, static_id: 2
+11675983: cap 0: Create spark for conjunction: 0x2524450 spark: 0x288
+11676190: cap 0: Start a parallel conjunction 0x25244b0, static_id: 2
+11676321: cap 0: Create spark for conjunction: 0x25244b0 spark: 0x289
+11676505: cap 0: Start a parallel conjunction 0x2524510, static_id: 2
+11676789: cap 0: Create spark for conjunction: 0x2524510 spark: 0x28a
+11676969: cap 0: Start a parallel conjunction 0x2524570, static_id: 2
+11677131: cap 0: Create spark for conjunction: 0x2524570 spark: 0x28b
+11677720: cap 0: Start a parallel conjunction 0x25245d0, static_id: 2
+11677842: cap 0: Create spark for conjunction: 0x25245d0 spark: 0x28c
+11678026: cap 0: Start a parallel conjunction 0x2524630, static_id: 2
+11678166: cap 0: Create spark for conjunction: 0x2524630 spark: 0x28d
+11678346: cap 0: Start a parallel conjunction 0x2524690, static_id: 2
+11678467: cap 0: Create spark for conjunction: 0x2524690 spark: 0x28e
+11678652: cap 0: Start a parallel conjunction 0x25246f0, static_id: 2
+11678782: cap 0: Create spark for conjunction: 0x25246f0 spark: 0x28f
+11678967: cap 0: Start a parallel conjunction 0x2524750, static_id: 2
+11679088: cap 0: Create spark for conjunction: 0x2524750 spark: 0x290
+11679268: cap 0: Start a parallel conjunction 0x25247b0, static_id: 2
+11679399: cap 0: Create spark for conjunction: 0x25247b0 spark: 0x291
+11679583: cap 0: Start a parallel conjunction 0x2524810, static_id: 2
+11679714: cap 0: Create spark for conjunction: 0x2524810 spark: 0x292
+11679912: cap 0: Start a parallel conjunction 0x2524870, static_id: 2
+11680042: cap 0: Create spark for conjunction: 0x2524870 spark: 0x293
+11680231: cap 0: Start a parallel conjunction 0x25248d0, static_id: 2
+11680366: cap 0: Create spark for conjunction: 0x25248d0 spark: 0x294
+11680564: cap 0: Start a parallel conjunction 0x2524930, static_id: 2
+11680695: cap 0: Create spark for conjunction: 0x2524930 spark: 0x295
+11680888: cap 0: Start a parallel conjunction 0x2524990, static_id: 2
+11681014: cap 0: Create spark for conjunction: 0x2524990 spark: 0x296
+11681199: cap 0: Start a parallel conjunction 0x25249f0, static_id: 2
+11681338: cap 0: Create spark for conjunction: 0x25249f0 spark: 0x297
+11681518: cap 0: Start a parallel conjunction 0x2524a50, static_id: 2
+11681644: cap 0: Create spark for conjunction: 0x2524a50 spark: 0x298
+11681833: cap 0: Start a parallel conjunction 0x2524ab0, static_id: 2
+11681959: cap 0: Create spark for conjunction: 0x2524ab0 spark: 0x299
+11682139: cap 0: Start a parallel conjunction 0x2524b10, static_id: 2
+11682261: cap 0: Create spark for conjunction: 0x2524b10 spark: 0x29a
+11682445: cap 0: Start a parallel conjunction 0x2524b70, static_id: 2
+11682576: cap 0: Create spark for conjunction: 0x2524b70 spark: 0x29b
+11682760: cap 0: Start a parallel conjunction 0x2524bd0, static_id: 2
+11682886: cap 0: Create spark for conjunction: 0x2524bd0 spark: 0x29c
+11683062: cap 0: Start a parallel conjunction 0x2524c30, static_id: 2
+11683206: cap 0: Create spark for conjunction: 0x2524c30 spark: 0x29d
+11683386: cap 0: Start a parallel conjunction 0x2524c90, static_id: 2
+11683512: cap 0: Create spark for conjunction: 0x2524c90 spark: 0x29e
+11683705: cap 0: Start a parallel conjunction 0x2524cf0, static_id: 2
+11683836: cap 0: Create spark for conjunction: 0x2524cf0 spark: 0x29f
+11684011: cap 0: Start a parallel conjunction 0x2524d50, static_id: 2
+11684133: cap 0: Create spark for conjunction: 0x2524d50 spark: 0x2a0
+11684317: cap 0: Start a parallel conjunction 0x2524db0, static_id: 2
+11684448: cap 0: Create spark for conjunction: 0x2524db0 spark: 0x2a1
+11684628: cap 0: Start a parallel conjunction 0x2524e10, static_id: 2
+11684749: cap 0: Create spark for conjunction: 0x2524e10 spark: 0x2a2
+11684938: cap 0: Start a parallel conjunction 0x2524e70, static_id: 2
+11685073: cap 0: Create spark for conjunction: 0x2524e70 spark: 0x2a3
+11685253: cap 0: Start a parallel conjunction 0x2524ed0, static_id: 2
+11685388: cap 0: Create spark for conjunction: 0x2524ed0 spark: 0x2a4
+11685577: cap 0: Start a parallel conjunction 0x2524f30, static_id: 2
+11685712: cap 0: Create spark for conjunction: 0x2524f30 spark: 0x2a5
+11685901: cap 0: Start a parallel conjunction 0x2524f90, static_id: 2
+11686027: cap 0: Create spark for conjunction: 0x2524f90 spark: 0x2a6
+11686554: cap 0: Start a parallel conjunction 0x2524ff0, static_id: 2
+11686693: cap 0: Create spark for conjunction: 0x2524ff0 spark: 0x2a7
+11686882: cap 0: Start a parallel conjunction 0x2525050, static_id: 2
+11687008: cap 0: Create spark for conjunction: 0x2525050 spark: 0x2a8
+11687202: cap 0: Start a parallel conjunction 0x25250b0, static_id: 2
+11687332: cap 0: Create spark for conjunction: 0x25250b0 spark: 0x2a9
+11687512: cap 0: Start a parallel conjunction 0x2525110, static_id: 2
+11687643: cap 0: Create spark for conjunction: 0x2525110 spark: 0x2aa
+11687827: cap 0: Start a parallel conjunction 0x2525170, static_id: 2
+11687953: cap 0: Create spark for conjunction: 0x2525170 spark: 0x2ab
+11688142: cap 0: Start a parallel conjunction 0x25251d0, static_id: 2
+11688264: cap 0: Create spark for conjunction: 0x25251d0 spark: 0x2ac
+11688448: cap 0: Start a parallel conjunction 0x2525230, static_id: 2
+11688583: cap 0: Create spark for conjunction: 0x2525230 spark: 0x2ad
+11688763: cap 0: Start a parallel conjunction 0x2525290, static_id: 2
+11688885: cap 0: Create spark for conjunction: 0x2525290 spark: 0x2ae
+11689074: cap 0: Start a parallel conjunction 0x25252f0, static_id: 2
+11689209: cap 0: Create spark for conjunction: 0x25252f0 spark: 0x2af
+11689389: cap 0: Start a parallel conjunction 0x2525350, static_id: 2
+11689510: cap 0: Create spark for conjunction: 0x2525350 spark: 0x2b0
+11689695: cap 0: Start a parallel conjunction 0x25253b0, static_id: 2
+11689825: cap 0: Create spark for conjunction: 0x25253b0 spark: 0x2b1
+11690005: cap 0: Start a parallel conjunction 0x2525410, static_id: 2
+11690131: cap 0: Create spark for conjunction: 0x2525410 spark: 0x2b2
+11690325: cap 0: Start a parallel conjunction 0x2525470, static_id: 2
+11690455: cap 0: Create spark for conjunction: 0x2525470 spark: 0x2b3
+11690631: cap 0: Start a parallel conjunction 0x25254d0, static_id: 2
+11690766: cap 0: Create spark for conjunction: 0x25254d0 spark: 0x2b4
+11690955: cap 0: Start a parallel conjunction 0x2525530, static_id: 2
+11691090: cap 0: Create spark for conjunction: 0x2525530 spark: 0x2b5
+11691279: cap 0: Start a parallel conjunction 0x2525590, static_id: 2
+11691405: cap 0: Create spark for conjunction: 0x2525590 spark: 0x2b6
+11691585: cap 0: Start a parallel conjunction 0x25255f0, static_id: 2
+11691724: cap 0: Create spark for conjunction: 0x25255f0 spark: 0x2b7
+11691904: cap 0: Start a parallel conjunction 0x2525650, static_id: 2
+11692026: cap 0: Create spark for conjunction: 0x2525650 spark: 0x2b8
+11692233: cap 0: Start a parallel conjunction 0x25256b0, static_id: 2
+11692363: cap 0: Create spark for conjunction: 0x25256b0 spark: 0x2b9
+11692539: cap 0: Start a parallel conjunction 0x2525710, static_id: 2
+11692665: cap 0: Create spark for conjunction: 0x2525710 spark: 0x2ba
+11692849: cap 0: Start a parallel conjunction 0x2525770, static_id: 2
+11692975: cap 0: Create spark for conjunction: 0x2525770 spark: 0x2bb
+11693164: cap 0: Start a parallel conjunction 0x25257d0, static_id: 2
+11693290: cap 0: Create spark for conjunction: 0x25257d0 spark: 0x2bc
+11693475: cap 0: Start a parallel conjunction 0x2525830, static_id: 2
+11693610: cap 0: Create spark for conjunction: 0x2525830 spark: 0x2bd
+11693794: cap 0: Start a parallel conjunction 0x2525890, static_id: 2
+11693916: cap 0: Create spark for conjunction: 0x2525890 spark: 0x2be
+11694127: cap 0: Start a parallel conjunction 0x25258f0, static_id: 2
+11694258: cap 0: Create spark for conjunction: 0x25258f0 spark: 0x2bf
+11694438: cap 0: Start a parallel conjunction 0x2525950, static_id: 2
+11694564: cap 0: Create spark for conjunction: 0x2525950 spark: 0x2c0
+11694753: cap 0: Start a parallel conjunction 0x25259b0, static_id: 2
+11694892: cap 0: Create spark for conjunction: 0x25259b0 spark: 0x2c1
+11695081: cap 0: Start a parallel conjunction 0x2525a10, static_id: 2
+11695203: cap 0: Create spark for conjunction: 0x2525a10 spark: 0x2c2
+11695401: cap 0: Start a parallel conjunction 0x2525a70, static_id: 2
+11695531: cap 0: Create spark for conjunction: 0x2525a70 spark: 0x2c3
+11695711: cap 0: Start a parallel conjunction 0x2525ad0, static_id: 2
+11695842: cap 0: Create spark for conjunction: 0x2525ad0 spark: 0x2c4
+11696031: cap 0: Start a parallel conjunction 0x2525b30, static_id: 2
+11696161: cap 0: Create spark for conjunction: 0x2525b30 spark: 0x2c5
+11696350: cap 0: Start a parallel conjunction 0x2525b90, static_id: 2
+11696476: cap 0: Create spark for conjunction: 0x2525b90 spark: 0x2c6
+11696656: cap 0: Start a parallel conjunction 0x2525bf0, static_id: 2
+11696791: cap 0: Create spark for conjunction: 0x2525bf0 spark: 0x2c7
+11696980: cap 0: Start a parallel conjunction 0x2525c50, static_id: 2
+11697106: cap 0: Create spark for conjunction: 0x2525c50 spark: 0x2c8
+11697300: cap 0: Start a parallel conjunction 0x2525cb0, static_id: 2
+11697435: cap 0: Create spark for conjunction: 0x2525cb0 spark: 0x2c9
+11697615: cap 0: Start a parallel conjunction 0x2525d10, static_id: 2
+11697741: cap 0: Create spark for conjunction: 0x2525d10 spark: 0x2ca
+11697925: cap 0: Start a parallel conjunction 0x2525d70, static_id: 2
+11698060: cap 0: Create spark for conjunction: 0x2525d70 spark: 0x2cb
+11698249: cap 0: Start a parallel conjunction 0x2525dd0, static_id: 2
+11698380: cap 0: Create spark for conjunction: 0x2525dd0 spark: 0x2cc
+11698560: cap 0: Start a parallel conjunction 0x2525e30, static_id: 2
+11698699: cap 0: Create spark for conjunction: 0x2525e30 spark: 0x2cd
+11698888: cap 0: Start a parallel conjunction 0x2525e90, static_id: 2
+11699014: cap 0: Create spark for conjunction: 0x2525e90 spark: 0x2ce
+11699221: cap 0: Start a parallel conjunction 0x2525ef0, static_id: 2
+11699356: cap 0: Create spark for conjunction: 0x2525ef0 spark: 0x2cf
+11699536: cap 0: Start a parallel conjunction 0x2525f50, static_id: 2
+11699662: cap 0: Create spark for conjunction: 0x2525f50 spark: 0x2d0
+11700009: cap 0: Start a parallel conjunction 0x2525fb0, static_id: 2
+11700139: cap 0: Create spark for conjunction: 0x2525fb0 spark: 0x2d1
+11700432: cap 0: Start a parallel conjunction 0x2526010, static_id: 2
+11700558: cap 0: Create spark for conjunction: 0x2526010 spark: 0x2d2
+11700751: cap 0: Start a parallel conjunction 0x2526070, static_id: 2
+11700882: cap 0: Create spark for conjunction: 0x2526070 spark: 0x2d3
+11701057: cap 0: Start a parallel conjunction 0x25260d0, static_id: 2
+11701183: cap 0: Create spark for conjunction: 0x25260d0 spark: 0x2d4
+11701372: cap 0: Start a parallel conjunction 0x2526130, static_id: 2
+11701503: cap 0: Create spark for conjunction: 0x2526130 spark: 0x2d5
+11701692: cap 0: Start a parallel conjunction 0x2526190, static_id: 2
+11701818: cap 0: Create spark for conjunction: 0x2526190 spark: 0x2d6
+11702133: cap 0: Start a parallel conjunction 0x25261f0, static_id: 2
+11702272: cap 0: Create spark for conjunction: 0x25261f0 spark: 0x2d7
+11702457: cap 0: Start a parallel conjunction 0x2526250, static_id: 2
+11702578: cap 0: Create spark for conjunction: 0x2526250 spark: 0x2d8
+11702763: cap 0: Start a parallel conjunction 0x25262b0, static_id: 2
+11702893: cap 0: Create spark for conjunction: 0x25262b0 spark: 0x2d9
+11703073: cap 0: Start a parallel conjunction 0x2526310, static_id: 2
+11703199: cap 0: Create spark for conjunction: 0x2526310 spark: 0x2da
+11703384: cap 0: Start a parallel conjunction 0x2526370, static_id: 2
+11703510: cap 0: Create spark for conjunction: 0x2526370 spark: 0x2db
+11703825: cap 0: Start a parallel conjunction 0x25263d0, static_id: 2
+11703946: cap 0: Create spark for conjunction: 0x25263d0 spark: 0x2dc
+11704140: cap 0: Start a parallel conjunction 0x2526430, static_id: 2
+11704275: cap 0: Create spark for conjunction: 0x2526430 spark: 0x2dd
+11704455: cap 0: Start a parallel conjunction 0x2526490, static_id: 2
+11704576: cap 0: Create spark for conjunction: 0x2526490 spark: 0x2de
+11704761: cap 0: Start a parallel conjunction 0x25264f0, static_id: 2
+11704891: cap 0: Create spark for conjunction: 0x25264f0 spark: 0x2df
+11705067: cap 0: Start a parallel conjunction 0x2526550, static_id: 2
+11705188: cap 0: Create spark for conjunction: 0x2526550 spark: 0x2e0
+11705373: cap 0: Start a parallel conjunction 0x25265b0, static_id: 2
+11705499: cap 0: Create spark for conjunction: 0x25265b0 spark: 0x2e1
+11705683: cap 0: Start a parallel conjunction 0x2526610, static_id: 2
+11705814: cap 0: Create spark for conjunction: 0x2526610 spark: 0x2e2
+11706003: cap 0: Start a parallel conjunction 0x2526670, static_id: 2
+11706133: cap 0: Create spark for conjunction: 0x2526670 spark: 0x2e3
+11706318: cap 0: Start a parallel conjunction 0x25266d0, static_id: 2
+11706448: cap 0: Create spark for conjunction: 0x25266d0 spark: 0x2e4
+11706642: cap 0: Start a parallel conjunction 0x2526730, static_id: 2
+11706777: cap 0: Create spark for conjunction: 0x2526730 spark: 0x2e5
+11706966: cap 0: Start a parallel conjunction 0x2526790, static_id: 2
+11707092: cap 0: Create spark for conjunction: 0x2526790 spark: 0x2e6
+11707272: cap 0: Start a parallel conjunction 0x25267f0, static_id: 2
+11707551: cap 0: Create spark for conjunction: 0x25267f0 spark: 0x2e7
+11707744: cap 0: Start a parallel conjunction 0x2526850, static_id: 2
+11707866: cap 0: Create spark for conjunction: 0x2526850 spark: 0x2e8
+11708185: cap 0: Start a parallel conjunction 0x25268b0, static_id: 2
+11708316: cap 0: Create spark for conjunction: 0x25268b0 spark: 0x2e9
+11708505: cap 0: Start a parallel conjunction 0x2526910, static_id: 2
+11708626: cap 0: Create spark for conjunction: 0x2526910 spark: 0x2ea
+11708811: cap 0: Start a parallel conjunction 0x2526970, static_id: 2
+11708937: cap 0: Create spark for conjunction: 0x2526970 spark: 0x2eb
+11709126: cap 0: Start a parallel conjunction 0x25269d0, static_id: 2
+11709247: cap 0: Create spark for conjunction: 0x25269d0 spark: 0x2ec
+11709427: cap 0: Start a parallel conjunction 0x2526a30, static_id: 2
+11709562: cap 0: Create spark for conjunction: 0x2526a30 spark: 0x2ed
+11709742: cap 0: Start a parallel conjunction 0x2526a90, static_id: 2
+11709864: cap 0: Create spark for conjunction: 0x2526a90 spark: 0x2ee
+11710062: cap 0: Start a parallel conjunction 0x2526af0, static_id: 2
+11710197: cap 0: Create spark for conjunction: 0x2526af0 spark: 0x2ef
+11710372: cap 0: Start a parallel conjunction 0x2526b50, static_id: 2
+11710503: cap 0: Create spark for conjunction: 0x2526b50 spark: 0x2f0
+11710696: cap 0: Start a parallel conjunction 0x2526bb0, static_id: 2
+11710827: cap 0: Create spark for conjunction: 0x2526bb0 spark: 0x2f1
+11711011: cap 0: Start a parallel conjunction 0x2526c10, static_id: 2
+11711128: cap 0: Create spark for conjunction: 0x2526c10 spark: 0x2f2
+11711322: cap 0: Start a parallel conjunction 0x2526c70, static_id: 2
+11711457: cap 0: Create spark for conjunction: 0x2526c70 spark: 0x2f3
+11711637: cap 0: Start a parallel conjunction 0x2526cd0, static_id: 2
+11711763: cap 0: Create spark for conjunction: 0x2526cd0 spark: 0x2f4
+11711952: cap 0: Start a parallel conjunction 0x2526d30, static_id: 2
+11712082: cap 0: Create spark for conjunction: 0x2526d30 spark: 0x2f5
+11712271: cap 0: Start a parallel conjunction 0x2526d90, static_id: 2
+11712397: cap 0: Create spark for conjunction: 0x2526d90 spark: 0x2f6
+11712577: cap 0: Start a parallel conjunction 0x2526df0, static_id: 2
+11712712: cap 0: Create spark for conjunction: 0x2526df0 spark: 0x2f7
+11712888: cap 0: Start a parallel conjunction 0x2526e50, static_id: 2
+11713009: cap 0: Create spark for conjunction: 0x2526e50 spark: 0x2f8
+11713198: cap 0: Start a parallel conjunction 0x2526eb0, static_id: 2
+11713329: cap 0: Create spark for conjunction: 0x2526eb0 spark: 0x2f9
+11713504: cap 0: Start a parallel conjunction 0x2526f10, static_id: 2
+11713626: cap 0: Create spark for conjunction: 0x2526f10 spark: 0x2fa
+11713810: cap 0: Start a parallel conjunction 0x2526f70, static_id: 2
+11713936: cap 0: Create spark for conjunction: 0x2526f70 spark: 0x2fb
+11714130: cap 0: Start a parallel conjunction 0x2526fd0, static_id: 2
+11714256: cap 0: Create spark for conjunction: 0x2526fd0 spark: 0x2fc
+11714463: cap 0: Start a parallel conjunction 0x2527030, static_id: 2
+11714598: cap 0: Create spark for conjunction: 0x2527030 spark: 0x2fd
+11714787: cap 0: Start a parallel conjunction 0x2527090, static_id: 2
+11714908: cap 0: Create spark for conjunction: 0x2527090 spark: 0x2fe
+11715097: cap 0: Start a parallel conjunction 0x25270f0, static_id: 2
+11715223: cap 0: Create spark for conjunction: 0x25270f0 spark: 0x2ff
+11715403: cap 0: Start a parallel conjunction 0x2527150, static_id: 2
+11715525: cap 0: Create spark for conjunction: 0x2527150 spark: 0x300
+11715705: cap 0: Start a parallel conjunction 0x25271b0, static_id: 2
+11715835: cap 0: Create spark for conjunction: 0x25271b0 spark: 0x301
+11716015: cap 0: Start a parallel conjunction 0x2527210, static_id: 2
+11716137: cap 0: Create spark for conjunction: 0x2527210 spark: 0x302
+11716321: cap 0: Start a parallel conjunction 0x2527270, static_id: 2
+11716452: cap 0: Create spark for conjunction: 0x2527270 spark: 0x303
+11716632: cap 0: Start a parallel conjunction 0x25272d0, static_id: 2
+11716803: cap 0: Create spark for conjunction: 0x25272d0 spark: 0x304
+11716987: cap 0: Start a parallel conjunction 0x2527330, static_id: 2
+11717113: cap 0: Create spark for conjunction: 0x2527330 spark: 0x305
+11717302: cap 0: Start a parallel conjunction 0x2527390, static_id: 2
+11717424: cap 0: Create spark for conjunction: 0x2527390 spark: 0x306
+11717604: cap 0: Start a parallel conjunction 0x25273f0, static_id: 2
+11717743: cap 0: Create spark for conjunction: 0x25273f0 spark: 0x307
+11717919: cap 0: Start a parallel conjunction 0x2527450, static_id: 2
+11718085: cap 0: Create spark for conjunction: 0x2527450 spark: 0x308
+11718288: cap 0: Start a parallel conjunction 0x25274b0, static_id: 2
+11718418: cap 0: Create spark for conjunction: 0x25274b0 spark: 0x309
+11718594: cap 0: Start a parallel conjunction 0x2527510, static_id: 2
+11718720: cap 0: Create spark for conjunction: 0x2527510 spark: 0x30a
+11718904: cap 0: Start a parallel conjunction 0x2527570, static_id: 2
+11719035: cap 0: Create spark for conjunction: 0x2527570 spark: 0x30b
+11719219: cap 0: Start a parallel conjunction 0x25275d0, static_id: 2
+11719341: cap 0: Create spark for conjunction: 0x25275d0 spark: 0x30c
+11719525: cap 0: Start a parallel conjunction 0x2527630, static_id: 2
+11719669: cap 0: Create spark for conjunction: 0x2527630 spark: 0x30d
+11719849: cap 0: Start a parallel conjunction 0x2527690, static_id: 2
+11719971: cap 0: Create spark for conjunction: 0x2527690 spark: 0x30e
+11720155: cap 0: Start a parallel conjunction 0x25276f0, static_id: 2
+11720290: cap 0: Create spark for conjunction: 0x25276f0 spark: 0x30f
+11720475: cap 0: Start a parallel conjunction 0x2527750, static_id: 2
+11720601: cap 0: Create spark for conjunction: 0x2527750 spark: 0x310
+11720776: cap 0: Start a parallel conjunction 0x25277b0, static_id: 2
+11720907: cap 0: Create spark for conjunction: 0x25277b0 spark: 0x311
+11721087: cap 0: Start a parallel conjunction 0x2527810, static_id: 2
+11721204: cap 0: Create spark for conjunction: 0x2527810 spark: 0x312
+11721393: cap 0: Start a parallel conjunction 0x2527870, static_id: 2
+11721528: cap 0: Create spark for conjunction: 0x2527870 spark: 0x313
+11721708: cap 0: Start a parallel conjunction 0x25278d0, static_id: 2
+11721834: cap 0: Create spark for conjunction: 0x25278d0 spark: 0x314
+11722149: cap 0: Start a parallel conjunction 0x2527930, static_id: 2
+11722275: cap 0: Create spark for conjunction: 0x2527930 spark: 0x315
+11722464: cap 0: Start a parallel conjunction 0x2527990, static_id: 2
+11722590: cap 0: Create spark for conjunction: 0x2527990 spark: 0x316
+11722770: cap 0: Start a parallel conjunction 0x25279f0, static_id: 2
+11722905: cap 0: Create spark for conjunction: 0x25279f0 spark: 0x317
+11723089: cap 0: Start a parallel conjunction 0x2527a50, static_id: 2
+11723215: cap 0: Create spark for conjunction: 0x2527a50 spark: 0x318
+11723400: cap 0: Start a parallel conjunction 0x2527ab0, static_id: 2
+11723535: cap 0: Create spark for conjunction: 0x2527ab0 spark: 0x319
+11723715: cap 0: Start a parallel conjunction 0x2527b10, static_id: 2
+11723836: cap 0: Create spark for conjunction: 0x2527b10 spark: 0x31a
+11724021: cap 0: Start a parallel conjunction 0x2527b70, static_id: 2
+11724151: cap 0: Create spark for conjunction: 0x2527b70 spark: 0x31b
+11724340: cap 0: Start a parallel conjunction 0x2527bd0, static_id: 2
+11724462: cap 0: Create spark for conjunction: 0x2527bd0 spark: 0x31c
+11724642: cap 0: Start a parallel conjunction 0x2527c30, static_id: 2
+11724781: cap 0: Create spark for conjunction: 0x2527c30 spark: 0x31d
+11724961: cap 0: Start a parallel conjunction 0x2527c90, static_id: 2
+11725092: cap 0: Create spark for conjunction: 0x2527c90 spark: 0x31e
+11725285: cap 0: Start a parallel conjunction 0x2527cf0, static_id: 2
+11725425: cap 0: Create spark for conjunction: 0x2527cf0 spark: 0x31f
+11728597: cap 0: End par conjunct: 0x2527cf0
+11730312: cap 0: running a local spark
+12148717: cap 3: creating spark thread 3
+12149284: cap 3: running thread 3
+12335386: cap 2: creating spark thread 2
+12336304: cap 2: running thread 2
+12609625: cap 1: creating spark thread 4
+12610075: cap 1: running thread 4
+12877888: cap 3: End par conjunct: 0x25151b0
+12878455: cap 3: Trying to steal a spark
+12879013: cap 3: stealing a spark from cap 0
+13341195: cap 2: End par conjunct: 0x2515150
+13342090: cap 2: Trying to steal a spark
+13343094: cap 2: stealing a spark from cap 0
+13501534: cap 3: End par conjunct: 0x2515270
+13501827: cap 3: Trying to steal a spark
+13502322: cap 3: stealing a spark from cap 0
+13596930: cap 1: End par conjunct: 0x2515210
+13597681: cap 1: Trying to steal a spark
+13598401: cap 1: stealing a spark from cap 0
+14083335: cap 1: stopping thread 4 (heap overflow)
+14083542: cap 1: starting GC
+14136727: cap 0: stopping thread 1 (thread yielding)
+14140219: cap 3: stopping thread 3 (thread yielding)
+14149165: cap 2: stopping thread 2 (thread yielding)
+23736676: cap 0: running thread 1
+23740087: cap 3: running thread 3
+23748079: cap 2: running thread 2
+23783076: cap 1: finished GC
+23783292: cap 1: running thread 4
+24076197: cap 2: End par conjunct: 0x25152d0
+24078132: cap 2: Trying to steal a spark
+24079986: cap 2: stealing a spark from cap 0
+24232905: cap 3: End par conjunct: 0x2515330
+24233566: cap 3: Trying to steal a spark
+24234601: cap 3: stealing a spark from cap 0
+24254811: cap 1: End par conjunct: 0x2515390
+24255621: cap 1: Trying to steal a spark
+24256161: cap 1: stealing a spark from cap 0
+24726721: cap 2: End par conjunct: 0x25153f0
+24726996: cap 2: Trying to steal a spark
+24727351: cap 2: stealing a spark from cap 0
+24884374: cap 1: End par conjunct: 0x25154b0
+24884775: cap 1: Trying to steal a spark
+24884995: cap 1: stealing a spark from cap 0
+25181676: cap 3: End par conjunct: 0x2515450
+25182256: cap 3: Trying to steal a spark
+25182837: cap 3: stealing a spark from cap 0
+25332556: cap 2: End par conjunct: 0x2515510
+25332939: cap 2: Trying to steal a spark
+25333330: cap 2: stealing a spark from cap 0
+25496014: cap 1: End par conjunct: 0x2515570
+25496253: cap 1: Trying to steal a spark
+25496473: cap 1: stealing a spark from cap 0
+25927915: cap 2: End par conjunct: 0x2515630
+25928122: cap 2: Trying to steal a spark
+25928334: cap 2: stealing a spark from cap 0
+26084745: cap 3: End par conjunct: 0x25155d0
+26085249: cap 3: Trying to steal a spark
+26085843: cap 3: stealing a spark from cap 0
+26090298: cap 1: End par conjunct: 0x2515690
+26090689: cap 1: Trying to steal a spark
+26091085: cap 1: stealing a spark from cap 0
+26536383: cap 2: End par conjunct: 0x25156f0
+26536603: cap 2: Trying to steal a spark
+26536914: cap 2: stealing a spark from cap 0
+26692762: cap 1: End par conjunct: 0x25157b0
+26692992: cap 1: Trying to steal a spark
+26693203: cap 1: stealing a spark from cap 0
+26979043: cap 3: End par conjunct: 0x2515750
+26979642: cap 3: Trying to steal a spark
+26980258: cap 3: stealing a spark from cap 0
+27137002: cap 2: End par conjunct: 0x2515810
+27137416: cap 2: Trying to steal a spark
+27137952: cap 2: stealing a spark from cap 0
+27307827: cap 1: End par conjunct: 0x2515870
+27308056: cap 1: Trying to steal a spark
+27308272: cap 1: stealing a spark from cap 0
+27746244: cap 2: End par conjunct: 0x2515930
+27746469: cap 2: Trying to steal a spark
+27746680: cap 2: stealing a spark from cap 0
+27876528: cap 3: End par conjunct: 0x25158d0
+27877045: cap 3: Trying to steal a spark
+27877761: cap 3: stealing a spark from cap 0
+27921861: cap 1: End par conjunct: 0x2515990
+27922432: cap 1: Trying to steal a spark
+27922869: cap 1: stealing a spark from cap 0
+28351957: cap 2: End par conjunct: 0x25159f0
+28352187: cap 2: Trying to steal a spark
+28352407: cap 2: stealing a spark from cap 0
+28533199: cap 1: End par conjunct: 0x2515ab0
+28533424: cap 1: Trying to steal a spark
+28533631: cap 1: stealing a spark from cap 0
+28780488: cap 3: End par conjunct: 0x2515a50
+28780996: cap 3: Trying to steal a spark
+28781604: cap 3: stealing a spark from cap 0
+28984594: cap 2: End par conjunct: 0x2515b10
+28985049: cap 2: Trying to steal a spark
+28985485: cap 2: stealing a spark from cap 0
+29173518: cap 1: End par conjunct: 0x2515b70
+29173806: cap 1: Trying to steal a spark
+29174062: cap 1: stealing a spark from cap 0
+29588274: cap 2: End par conjunct: 0x2515c30
+29588494: cap 2: Trying to steal a spark
+29588706: cap 2: stealing a spark from cap 0
+29705886: cap 3: End par conjunct: 0x2515bd0
+29706475: cap 3: Trying to steal a spark
+29707047: cap 3: stealing a spark from cap 0
+29788911: cap 1: End par conjunct: 0x2515c90
+29789302: cap 1: Trying to steal a spark
+29789694: cap 1: stealing a spark from cap 0
+30185464: cap 2: End par conjunct: 0x2515cf0
+30185671: cap 2: Trying to steal a spark
+30185982: cap 2: stealing a spark from cap 0
+30392149: cap 1: End par conjunct: 0x2515db0
+30392374: cap 1: Trying to steal a spark
+30392590: cap 1: stealing a spark from cap 0
+30611209: cap 3: End par conjunct: 0x2515d50
+30611916: cap 3: Trying to steal a spark
+30612640: cap 3: stealing a spark from cap 0
+30809916: cap 2: End par conjunct: 0x2515e10
+30810312: cap 2: Trying to steal a spark
+30810712: cap 2: stealing a spark from cap 0
+31008384: cap 1: End par conjunct: 0x2515e70
+31008600: cap 1: Trying to steal a spark
+31008901: cap 1: stealing a spark from cap 0
+31420368: cap 2: End par conjunct: 0x2515f30
+31420593: cap 2: Trying to steal a spark
+31420809: cap 2: stealing a spark from cap 0
+31533394: cap 3: End par conjunct: 0x2515ed0
+31533984: cap 3: Trying to steal a spark
+31534591: cap 3: stealing a spark from cap 0
+31615168: cap 1: End par conjunct: 0x2515f90
+31615596: cap 1: Trying to steal a spark
+31615992: cap 1: stealing a spark from cap 0
+32033641: cap 2: End par conjunct: 0x2515ff0
+32033866: cap 2: Trying to steal a spark
+32034177: cap 2: stealing a spark from cap 0
+32268591: cap 1: End par conjunct: 0x25160b0
+32268874: cap 1: Trying to steal a spark
+32269131: cap 1: stealing a spark from cap 0
+32468868: cap 3: End par conjunct: 0x2516050
+32469426: cap 3: Trying to steal a spark
+32470078: cap 3: stealing a spark from cap 0
+32677348: cap 2: End par conjunct: 0x2516110
+32677776: cap 2: Trying to steal a spark
+32678208: cap 2: stealing a spark from cap 0
+32876379: cap 1: End par conjunct: 0x2516170
+32876590: cap 1: Trying to steal a spark
+32876811: cap 1: stealing a spark from cap 0
+33304153: cap 2: End par conjunct: 0x2516230
+33304374: cap 2: Trying to steal a spark
+33304684: cap 2: stealing a spark from cap 0
+33398968: cap 3: End par conjunct: 0x25161d0
+33399441: cap 3: Trying to steal a spark
+33399936: cap 3: stealing a spark from cap 0
+33498414: cap 1: End par conjunct: 0x2516290
+33498900: cap 1: Trying to steal a spark
+33499372: cap 1: stealing a spark from cap 0
+33926773: cap 2: End par conjunct: 0x25162f0
+33927003: cap 2: Trying to steal a spark
+33927219: cap 2: stealing a spark from cap 0
+34125759: cap 1: End par conjunct: 0x25163b0
+34125984: cap 1: Trying to steal a spark
+34126200: cap 1: stealing a spark from cap 0
+34343518: cap 3: End par conjunct: 0x2516350
+34344018: cap 3: Trying to steal a spark
+34344841: cap 3: stealing a spark from cap 0
+34555158: cap 2: End par conjunct: 0x2516410
+34555585: cap 2: Trying to steal a spark
+34555999: cap 2: stealing a spark from cap 0
+34755426: cap 1: End par conjunct: 0x2516470
+34755651: cap 1: Trying to steal a spark
+34755885: cap 1: stealing a spark from cap 0
+35181679: cap 2: End par conjunct: 0x2516530
+35181904: cap 2: Trying to steal a spark
+35182219: cap 2: stealing a spark from cap 0
+35299462: cap 3: End par conjunct: 0x25164d0
+35300011: cap 3: Trying to steal a spark
+35300614: cap 3: stealing a spark from cap 0
+35403894: cap 1: End par conjunct: 0x2516590
+35404425: cap 1: Trying to steal a spark
+35404992: cap 1: stealing a spark from cap 0
+35817421: cap 2: End par conjunct: 0x25165f0
+35817651: cap 2: Trying to steal a spark
+35817867: cap 2: stealing a spark from cap 0
+36025614: cap 1: End par conjunct: 0x25166b0
+36025843: cap 1: Trying to steal a spark
+36026055: cap 1: stealing a spark from cap 0
+36222511: cap 3: End par conjunct: 0x2516650
+36223024: cap 3: Trying to steal a spark
+36223618: cap 3: stealing a spark from cap 0
+36455044: cap 2: End par conjunct: 0x2516710
+36455602: cap 2: Trying to steal a spark
+36456102: cap 2: stealing a spark from cap 0
+36668988: cap 1: End par conjunct: 0x2516770
+36669204: cap 1: Trying to steal a spark
+36669415: cap 1: stealing a spark from cap 0
+37113880: cap 2: End par conjunct: 0x2516830
+37114330: cap 2: Trying to steal a spark
+37114650: cap 2: stealing a spark from cap 0
+37175854: cap 3: End par conjunct: 0x25167d0
+37176363: cap 3: Trying to steal a spark
+37176957: cap 3: stealing a spark from cap 0
+37328764: cap 1: End par conjunct: 0x2516890
+37329291: cap 1: Trying to steal a spark
+37329781: cap 1: stealing a spark from cap 0
+37769184: cap 2: End par conjunct: 0x25168f0
+37769454: cap 2: Trying to steal a spark
+37769818: cap 2: stealing a spark from cap 0
+37969281: cap 1: End par conjunct: 0x25169b0
+37969506: cap 1: Trying to steal a spark
+37969722: cap 1: stealing a spark from cap 0
+38118726: cap 3: End par conjunct: 0x2516950
+38119275: cap 3: Trying to steal a spark
+38119873: cap 3: stealing a spark from cap 0
+38409223: cap 2: End par conjunct: 0x2516a10
+38409628: cap 2: Trying to steal a spark
+38410029: cap 2: stealing a spark from cap 0
+38624274: cap 1: End par conjunct: 0x2516a70
+38624539: cap 1: Trying to steal a spark
+38624760: cap 1: stealing a spark from cap 0
+39093678: cap 2: End par conjunct: 0x2516b30
+39093957: cap 2: Trying to steal a spark
+39094204: cap 2: stealing a spark from cap 0
+39133138: cap 3: End par conjunct: 0x2516ad0
+39133723: cap 3: Trying to steal a spark
+39134574: cap 3: stealing a spark from cap 0
+39276504: cap 1: End par conjunct: 0x2516b90
+39276913: cap 1: Trying to steal a spark
+39277332: cap 1: stealing a spark from cap 0
+39746497: cap 2: End par conjunct: 0x2516bf0
+39746718: cap 2: Trying to steal a spark
+39746938: cap 2: stealing a spark from cap 0
+39951765: cap 1: End par conjunct: 0x2516cb0
+39952062: cap 1: Trying to steal a spark
+39952341: cap 1: stealing a spark from cap 0
+40113454: cap 3: End par conjunct: 0x2516c50
+40113999: cap 3: Trying to steal a spark
+40114507: cap 3: stealing a spark from cap 0
+40408366: cap 2: End par conjunct: 0x2516d10
+40408816: cap 2: Trying to steal a spark
+40409239: cap 2: stealing a spark from cap 0
+40619043: cap 1: End par conjunct: 0x2516d70
+40619268: cap 1: Trying to steal a spark
+40619488: cap 1: stealing a spark from cap 0
+41067765: cap 2: End par conjunct: 0x2516e30
+41068017: cap 2: Trying to steal a spark
+41068260: cap 2: stealing a spark from cap 0
+41114754: cap 3: End par conjunct: 0x2516dd0
+41115456: cap 3: Trying to steal a spark
+41116095: cap 3: stealing a spark from cap 0
+41283873: cap 1: End par conjunct: 0x2516e90
+41284156: cap 1: Trying to steal a spark
+41284548: cap 1: stealing a spark from cap 0
+41730048: cap 2: End par conjunct: 0x2516ef0
+41730273: cap 2: Trying to steal a spark
+41730583: cap 2: stealing a spark from cap 0
+41952546: cap 1: End par conjunct: 0x2516fb0
+41952771: cap 1: Trying to steal a spark
+41952982: cap 1: stealing a spark from cap 0
+42100420: cap 3: End par conjunct: 0x2516f50
+42100924: cap 3: Trying to steal a spark
+42101577: cap 3: stealing a spark from cap 0
+42400962: cap 2: End par conjunct: 0x2517010
+42401286: cap 2: Trying to steal a spark
+42401709: cap 2: stealing a spark from cap 0
+42633526: cap 1: End par conjunct: 0x2517070
+42633801: cap 1: Trying to steal a spark
+42634035: cap 1: stealing a spark from cap 0
+43071579: cap 2: End par conjunct: 0x2517130
+43071804: cap 2: Trying to steal a spark
+43072141: cap 2: stealing a spark from cap 0
+43098408: cap 3: End par conjunct: 0x25170d0
+43099047: cap 3: Trying to steal a spark
+43099650: cap 3: stealing a spark from cap 0
+43299085: cap 1: End par conjunct: 0x2517190
+43299540: cap 1: Trying to steal a spark
+43299994: cap 1: stealing a spark from cap 0
+43749342: cap 2: End par conjunct: 0x25171f0
+43749675: cap 2: Trying to steal a spark
+43749981: cap 2: stealing a spark from cap 0
+43987482: cap 1: End par conjunct: 0x25172b0
+43987711: cap 1: Trying to steal a spark
+43987927: cap 1: stealing a spark from cap 0
+44106511: cap 3: End par conjunct: 0x2517250
+44107020: cap 3: Trying to steal a spark
+44107524: cap 3: stealing a spark from cap 0
+44435862: cap 2: End par conjunct: 0x2517310
+44436258: cap 2: Trying to steal a spark
+44436654: cap 2: stealing a spark from cap 0
+44685877: cap 1: End par conjunct: 0x2517370
+44686093: cap 1: Trying to steal a spark
+44686305: cap 1: stealing a spark from cap 0
+45133911: cap 2: End par conjunct: 0x2517430
+45134136: cap 2: Trying to steal a spark
+45134446: cap 2: stealing a spark from cap 0
+45154615: cap 3: End par conjunct: 0x25173d0
+45155164: cap 3: Trying to steal a spark
+45155763: cap 3: stealing a spark from cap 0
+45397935: cap 1: End par conjunct: 0x2517490
+45398326: cap 1: Trying to steal a spark
+45398718: cap 1: stealing a spark from cap 0
+45836001: cap 2: End par conjunct: 0x25174f0
+45836226: cap 2: Trying to steal a spark
+45836541: cap 2: stealing a spark from cap 0
+46110154: cap 1: End par conjunct: 0x25175b0
+46110379: cap 1: Trying to steal a spark
+46110595: cap 1: stealing a spark from cap 0
+46221808: cap 3: End par conjunct: 0x2517550
+46222308: cap 3: Trying to steal a spark
+46222902: cap 3: stealing a spark from cap 0
+46588792: cap 2: End par conjunct: 0x2517610
+46589211: cap 2: Trying to steal a spark
+46589625: cap 2: stealing a spark from cap 0
+46844860: cap 1: End par conjunct: 0x2517670
+46845072: cap 1: Trying to steal a spark
+46845288: cap 1: stealing a spark from cap 0
+47312941: cap 2: End par conjunct: 0x2517730
+47313166: cap 2: Trying to steal a spark
+47313477: cap 2: stealing a spark from cap 0
+47330820: cap 3: End par conjunct: 0x25176d0
+47331400: cap 3: Trying to steal a spark
+47332035: cap 3: stealing a spark from cap 0
+47604280: cap 1: End par conjunct: 0x2517790
+47604735: cap 1: Trying to steal a spark
+47605203: cap 1: stealing a spark from cap 0
+48060094: cap 2: End par conjunct: 0x25177f0
+48060297: cap 2: Trying to steal a spark
+48060603: cap 2: stealing a spark from cap 0
+48358003: cap 1: End par conjunct: 0x25178b0
+48358228: cap 1: Trying to steal a spark
+48358458: cap 1: stealing a spark from cap 0
+48437491: cap 3: End par conjunct: 0x2517850
+48437964: cap 3: Trying to steal a spark
+48438558: cap 3: stealing a spark from cap 0
+48805825: cap 2: End par conjunct: 0x2517910
+48806239: cap 2: Trying to steal a spark
+48806824: cap 2: stealing a spark from cap 0
+49100440: cap 1: End par conjunct: 0x2517970
+49100665: cap 1: Trying to steal a spark
+49100886: cap 1: stealing a spark from cap 0
+49579861: cap 3: End par conjunct: 0x25179d0
+49580419: cap 3: Trying to steal a spark
+49581022: cap 3: stealing a spark from cap 0
+49636854: cap 2: End par conjunct: 0x2517a30
+49637754: cap 2: Trying to steal a spark
+49638730: cap 2: stealing a spark from cap 0
+49870381: cap 1: End par conjunct: 0x2517a90
+49870705: cap 1: Trying to steal a spark
+49870917: cap 1: stealing a spark from cap 0
+50426550: cap 2: End par conjunct: 0x2517b50
+50426932: cap 2: Trying to steal a spark
+50427261: cap 2: stealing a spark from cap 0
+50665230: cap 1: End par conjunct: 0x2517bb0
+50665441: cap 1: Trying to steal a spark
+50665653: cap 1: stealing a spark from cap 0
+50830560: cap 3: End par conjunct: 0x2517af0
+50831068: cap 3: Trying to steal a spark
+50831662: cap 3: stealing a spark from cap 0
+51224148: cap 2: End par conjunct: 0x2517c10
+51224454: cap 2: Trying to steal a spark
+51225012: cap 2: stealing a spark from cap 0
+51483465: cap 1: End par conjunct: 0x2517c70
+51483685: cap 1: Trying to steal a spark
+51483906: cap 1: stealing a spark from cap 0
+52064626: cap 3: End par conjunct: 0x2517cd0
+52065135: cap 3: Trying to steal a spark
+52065729: cap 3: stealing a spark from cap 0
+52247997: cap 2: End par conjunct: 0x2517d30
+52248433: cap 2: Trying to steal a spark
+52248924: cap 2: stealing a spark from cap 0
+52314489: cap 1: End par conjunct: 0x2517d90
+52314921: cap 1: Trying to steal a spark
+52315168: cap 1: stealing a spark from cap 0
+53089573: cap 2: End par conjunct: 0x2517e50
+53089983: cap 2: Trying to steal a spark
+53090334: cap 2: stealing a spark from cap 0
+53148744: cap 1: End par conjunct: 0x2517eb0
+53148991: cap 1: Trying to steal a spark
+53149203: cap 1: stealing a spark from cap 0
+53306419: cap 3: End par conjunct: 0x2517df0
+53306928: cap 3: Trying to steal a spark
+53307544: cap 3: stealing a spark from cap 0
+53907304: cap 2: End par conjunct: 0x2517f10
+53907579: cap 2: Trying to steal a spark
+53907961: cap 2: stealing a spark from cap 0
+54013536: cap 1: End par conjunct: 0x2517f70
+54013806: cap 1: Trying to steal a spark
+54014022: cap 1: stealing a spark from cap 0
+54337927: cap 3: End par conjunct: 0x2517fd0
+54338431: cap 3: Trying to steal a spark
+54338931: cap 3: stealing a spark from cap 0
+54762241: cap 2: End par conjunct: 0x2518030
+54762664: cap 2: Trying to steal a spark
+54763177: cap 2: stealing a spark from cap 0
+54909072: cap 1: End par conjunct: 0x2518090
+54909450: cap 1: Trying to steal a spark
+54909684: cap 1: stealing a spark from cap 0
+55878903: cap 2: End par conjunct: 0x2518150
+55879249: cap 2: Trying to steal a spark
+55879465: cap 2: stealing a spark from cap 0
+55923277: cap 3: End par conjunct: 0x25180f0
+55923610: cap 3: Trying to steal a spark
+55924101: cap 3: stealing a spark from cap 0
+56954371: cap 1: End par conjunct: 0x25181b0
+56954632: cap 1: Trying to steal a spark
+56955096: cap 1: stealing a spark from cap 0
+58131936: cap 2: End par conjunct: 0x2518210
+58132260: cap 2: Trying to steal a spark
+58132476: cap 2: stealing a spark from cap 0
+58232556: cap 3: End par conjunct: 0x2518270
+58232889: cap 3: Trying to steal a spark
+58233262: cap 3: stealing a spark from cap 0
+59230395: cap 1: End par conjunct: 0x25182d0
+59231034: cap 1: Trying to steal a spark
+59231439: cap 1: stealing a spark from cap 0
+59402803: cap 3: End par conjunct: 0x2518390
+59403244: cap 3: Trying to steal a spark
+59403739: cap 3: stealing a spark from cap 0
+59775511: cap 2: End par conjunct: 0x2518330
+59775781: cap 2: Trying to steal a spark
+59776168: cap 2: stealing a spark from cap 0
+60382269: cap 3: End par conjunct: 0x2518450
+60382647: cap 3: Trying to steal a spark
+60383133: cap 3: stealing a spark from cap 0
+60445363: cap 1: End par conjunct: 0x25183f0
+60445737: cap 1: Trying to steal a spark
+60446155: cap 1: stealing a spark from cap 0
+61507039: cap 2: End par conjunct: 0x25184b0
+61507665: cap 2: Trying to steal a spark
+61508101: cap 2: stealing a spark from cap 0
+62346784: cap 1: End par conjunct: 0x2518570
+62347000: cap 1: Trying to steal a spark
+62347216: cap 1: stealing a spark from cap 0
+62512888: cap 3: End par conjunct: 0x2518510
+62513284: cap 3: Trying to steal a spark
+62513658: cap 3: stealing a spark from cap 0
+63392238: cap 2: End par conjunct: 0x25185d0
+63392625: cap 2: Trying to steal a spark
+63393111: cap 2: stealing a spark from cap 0
+63590472: cap 3: End par conjunct: 0x2518690
+63590904: cap 3: Trying to steal a spark
+63591385: cap 3: stealing a spark from cap 0
+64123029: cap 1: End par conjunct: 0x2518630
+64123375: cap 1: Trying to steal a spark
+64123893: cap 1: stealing a spark from cap 0
+64477633: cap 2: End par conjunct: 0x25186f0
+64477975: cap 2: Trying to steal a spark
+64478223: cap 2: stealing a spark from cap 0
+64722933: cap 3: End par conjunct: 0x2518750
+64723369: cap 3: Trying to steal a spark
+64723851: cap 3: stealing a spark from cap 0
+65542941: cap 1: End par conjunct: 0x25187b0
+65543301: cap 1: Trying to steal a spark
+65543782: cap 1: stealing a spark from cap 0
+65650234: cap 2: End par conjunct: 0x2518810
+65650576: cap 2: Trying to steal a spark
+65650788: cap 2: stealing a spark from cap 0
+66578935: cap 3: End par conjunct: 0x2518870
+66579484: cap 3: Trying to steal a spark
+66580056: cap 3: stealing a spark from cap 0
+66854529: cap 2: End par conjunct: 0x2518930
+66854853: cap 2: Trying to steal a spark
+66855343: cap 2: stealing a spark from cap 0
+66946320: cap 1: End par conjunct: 0x25188d0
+66946707: cap 1: Trying to steal a spark
+66946963: cap 1: stealing a spark from cap 0
+67733041: cap 3: End par conjunct: 0x2518990
+67733455: cap 3: Trying to steal a spark
+67733950: cap 3: stealing a spark from cap 0
+68058499: cap 2: End par conjunct: 0x25189f0
+68058882: cap 2: Trying to steal a spark
+68059377: cap 2: stealing a spark from cap 0
+68678649: cap 1: End par conjunct: 0x2518a50
+68678982: cap 1: Trying to steal a spark
+68679229: cap 1: stealing a spark from cap 0
+69240861: cap 3: End par conjunct: 0x2518ab0
+69241176: cap 3: Trying to steal a spark
+69241567: cap 3: stealing a spark from cap 0
+69304954: cap 2: End par conjunct: 0x2518b10
+69305319: cap 2: Trying to steal a spark
+69305692: cap 2: stealing a spark from cap 0
+70140240: cap 1: End par conjunct: 0x2518b70
+70140469: cap 1: Trying to steal a spark
+70140685: cap 1: stealing a spark from cap 0
+70773511: cap 3: End par conjunct: 0x2518bd0
+70773885: cap 3: Trying to steal a spark
+70774366: cap 3: stealing a spark from cap 0
+70808850: cap 2: End par conjunct: 0x2518c30
+70809367: cap 2: Trying to steal a spark
+70809768: cap 2: stealing a spark from cap 0
+71873527: cap 1: End par conjunct: 0x2518c90
+71873860: cap 1: Trying to steal a spark
+71874072: cap 1: stealing a spark from cap 0
+72283689: cap 2: End par conjunct: 0x2518d50
+72284017: cap 2: Trying to steal a spark
+72284233: cap 2: stealing a spark from cap 0
+73054251: cap 3: End par conjunct: 0x2518cf0
+73054732: cap 3: Trying to steal a spark
+73055466: cap 3: stealing a spark from cap 0
+73159285: cap 1: End par conjunct: 0x2518db0
+73159722: cap 1: Trying to steal a spark
+73160388: cap 1: stealing a spark from cap 0
+74440966: cap 3: End par conjunct: 0x2518e70
+74441227: cap 3: Trying to steal a spark
+74441610: cap 3: stealing a spark from cap 0
+74785315: cap 2: End par conjunct: 0x2518e10
+74786017: cap 2: Trying to steal a spark
+74787043: cap 2: stealing a spark from cap 0
+75288483: cap 1: End par conjunct: 0x2518ed0
+75288820: cap 1: Trying to steal a spark
+75289032: cap 1: stealing a spark from cap 0
+77436747: cap 3: End par conjunct: 0x2518f30
+77437134: cap 3: Trying to steal a spark
+77437759: cap 3: stealing a spark from cap 0
+78004147: cap 2: End par conjunct: 0x2518f90
+78004602: cap 2: Trying to steal a spark
+78005169: cap 2: stealing a spark from cap 0
+78438784: cap 1: End par conjunct: 0x2518ff0
+78439081: cap 1: Trying to steal a spark
+78439360: cap 1: stealing a spark from cap 0
+80926996: cap 3: End par conjunct: 0x2519050
+80927392: cap 3: Trying to steal a spark
+80927775: cap 3: stealing a spark from cap 0
+82047559: cap 2: End par conjunct: 0x25190b0
+82047987: cap 2: Trying to steal a spark
+82048459: cap 2: stealing a spark from cap 0
+83968875: cap 1: End par conjunct: 0x2519110
+83969217: cap 1: Trying to steal a spark
+83969428: cap 1: stealing a spark from cap 0
+86729665: cap 3: End par conjunct: 0x2519170
+86730021: cap 3: Trying to steal a spark
+86730417: cap 3: stealing a spark from cap 0
+88351767: cap 2: End par conjunct: 0x25191d0
+88352401: cap 2: Trying to steal a spark
+88353040: cap 2: stealing a spark from cap 0
+91559997: cap 1: End par conjunct: 0x2519230
+91560532: cap 1: Trying to steal a spark
+91560888: cap 1: stealing a spark from cap 0
+94191606: cap 3: End par conjunct: 0x2519290
+94192038: cap 3: Trying to steal a spark
+94192447: cap 3: stealing a spark from cap 0
+96909921: cap 2: End par conjunct: 0x25192f0
+96910249: cap 2: Trying to steal a spark
+96910677: cap 2: stealing a spark from cap 0
+101435247: cap 1: End par conjunct: 0x2519350
+101435656: cap 1: Trying to steal a spark
+101435913: cap 1: stealing a spark from cap 0
+106433743: cap 3: End par conjunct: 0x25193b0
+106434189: cap 3: Trying to steal a spark
+106434796: cap 3: stealing a spark from cap 0
+109706557: cap 2: End par conjunct: 0x2519410
+109707070: cap 2: Trying to steal a spark
+109707538: cap 2: stealing a spark from cap 0
+114820515: cap 1: End par conjunct: 0x2519470
+114820857: cap 1: Trying to steal a spark
+114821217: cap 1: stealing a spark from cap 0
+119917665: cap 3: End par conjunct: 0x25194d0
+119918088: cap 3: Trying to steal a spark
+119918511: cap 3: stealing a spark from cap 0
+123108241: cap 2: End par conjunct: 0x2519530
+123108687: cap 2: Trying to steal a spark
+123109312: cap 2: stealing a spark from cap 0
+128630704: cap 1: End par conjunct: 0x2519590
+128631078: cap 1: Trying to steal a spark
+128631334: cap 1: stealing a spark from cap 0
+134686683: cap 3: End par conjunct: 0x25195f0
+134687052: cap 3: Trying to steal a spark
+134687601: cap 3: stealing a spark from cap 0
+137862301: cap 2: End par conjunct: 0x2519650
+137862945: cap 2: Trying to steal a spark
+137863800: cap 2: stealing a spark from cap 0
+144241731: cap 1: End par conjunct: 0x25196b0
+144242343: cap 1: Trying to steal a spark
+144242730: cap 1: stealing a spark from cap 0
+151251367: cap 3: End par conjunct: 0x2519710
+151251804: cap 3: Trying to steal a spark
+151252218: cap 3: stealing a spark from cap 0
+156148578: cap 2: End par conjunct: 0x2519770
+156149059: cap 2: Trying to steal a spark
+156149635: cap 2: stealing a spark from cap 0
+164802690: cap 1: End par conjunct: 0x25197d0
+164803180: cap 1: Trying to steal a spark
+164803441: cap 1: stealing a spark from cap 0
+172408338: cap 3: End par conjunct: 0x2519830
+172408693: cap 3: Trying to steal a spark
+172409116: cap 3: stealing a spark from cap 0
+178849849: cap 2: End par conjunct: 0x2519890
+178850839: cap 2: Trying to steal a spark
+178851514: cap 2: stealing a spark from cap 0
+190023232: cap 1: End par conjunct: 0x25198f0
+190023628: cap 1: Trying to steal a spark
+190024060: cap 1: stealing a spark from cap 0
+198545305: cap 3: End par conjunct: 0x2519950
+198545724: cap 3: Trying to steal a spark
+198546151: cap 3: stealing a spark from cap 0
+198953811: cap 0: End par conjunct: 0x2527cf0
+198958869: cap 0: End par conjunction: 0x2527cf0
+198959206: cap 0: End par conjunct: 0x2527c90
+198959832: cap 0: running a local spark
+204747844: cap 2: End par conjunct: 0x25199b0
+204748560: cap 2: Trying to steal a spark
+204749253: cap 2: stealing a spark from cap 0
+216975420: cap 1: End par conjunct: 0x2519a10
+216976068: cap 1: Trying to steal a spark
+216976392: cap 1: stealing a spark from cap 0
+226126588: cap 3: End par conjunct: 0x2519a70
+226127047: cap 3: Trying to steal a spark
+226127484: cap 3: stealing a spark from cap 0
+231747502: cap 2: End par conjunct: 0x2519ad0
+231747970: cap 2: Trying to steal a spark
+231748443: cap 2: stealing a spark from cap 0
+247099896: cap 1: End par conjunct: 0x2519b30
+247100737: cap 1: Trying to steal a spark
+247101367: cap 1: stealing a spark from cap 0
+255828780: cap 3: End par conjunct: 0x2519b90
+255829216: cap 3: Trying to steal a spark
+255829729: cap 3: stealing a spark from cap 0
+260583750: cap 2: End par conjunct: 0x2519bf0
+260584209: cap 2: Trying to steal a spark
+260584807: cap 2: stealing a spark from cap 0
+274906435: cap 1: End par conjunct: 0x2519c50
+274906827: cap 1: Trying to steal a spark
+274907083: cap 1: stealing a spark from cap 0
+284926387: cap 3: End par conjunct: 0x2519cb0
+284926752: cap 3: Trying to steal a spark
+284927184: cap 3: stealing a spark from cap 0
+290982267: cap 2: End par conjunct: 0x2519d10
+290983005: cap 2: Trying to steal a spark
+290983702: cap 2: stealing a spark from cap 0
+307252908: cap 1: End par conjunct: 0x2519d70
+307253191: cap 1: Trying to steal a spark
+307253569: cap 1: stealing a spark from cap 0
+319299286: cap 3: End par conjunct: 0x2519dd0
+319299700: cap 3: Trying to steal a spark
+319300159: cap 3: stealing a spark from cap 0
+326048778: cap 2: End par conjunct: 0x2519e30
+326049336: cap 2: Trying to steal a spark
+326049898: cap 2: stealing a spark from cap 0
+350669619: cap 1: End par conjunct: 0x2519e90
+350670901: cap 1: Trying to steal a spark
+350671846: cap 1: stealing a spark from cap 0
+358029666: cap 3: End par conjunct: 0x2519ef0
+358030057: cap 3: Trying to steal a spark
+358030525: cap 3: stealing a spark from cap 0
+364705011: cap 2: End par conjunct: 0x2519f50
+364706158: cap 2: Trying to steal a spark
+364706928: cap 2: stealing a spark from cap 0
+365778837: cap 0: End par conjunct: 0x2527c90
+365779084: cap 0: End par conjunction: 0x2527c90
+365779363: cap 0: End par conjunct: 0x2527c30
+365779795: cap 0: running a local spark
+391049748: cap 1: End par conjunct: 0x2519fb0
+391050117: cap 1: Trying to steal a spark
+391050733: cap 1: stealing a spark from cap 0
+397728738: cap 3: End par conjunct: 0x251a010
+397729296: cap 3: Trying to steal a spark
+397729710: cap 3: stealing a spark from cap 0
+403134480: cap 2: End par conjunct: 0x251a070
+403134916: cap 2: Trying to steal a spark
+403135398: cap 2: stealing a spark from cap 0
+430105333: cap 1: End par conjunct: 0x251a0d0
+430105828: cap 1: Trying to steal a spark
+430106098: cap 1: stealing a spark from cap 0
+436262724: cap 3: End par conjunct: 0x251a130
+436263097: cap 3: Trying to steal a spark
+436263556: cap 3: stealing a spark from cap 0
+441701977: cap 2: End par conjunct: 0x251a190
+441702540: cap 2: Trying to steal a spark
+441703102: cap 2: stealing a spark from cap 0
+471085258: cap 1: End par conjunct: 0x251a1f0
+471085825: cap 1: Trying to steal a spark
+471086374: cap 1: stealing a spark from cap 0
+477770602: cap 3: End par conjunct: 0x251a250
+477771034: cap 3: Trying to steal a spark
+477771471: cap 3: stealing a spark from cap 0
+484487622: cap 2: End par conjunct: 0x251a2b0
+484488301: cap 2: Trying to steal a spark
+484488778: cap 2: stealing a spark from cap 0
+514659478: cap 1: End par conjunct: 0x251a310
+514659942: cap 1: Trying to steal a spark
+514660297: cap 1: stealing a spark from cap 0
+521906107: cap 3: End par conjunct: 0x251a370
+521906481: cap 3: Trying to steal a spark
+521906908: cap 3: stealing a spark from cap 0
+529207344: cap 2: End par conjunct: 0x251a3d0
+529207843: cap 2: Trying to steal a spark
+529208352: cap 2: stealing a spark from cap 0
+531944473: cap 0: End par conjunct: 0x2527c30
+531944712: cap 0: End par conjunction: 0x2527c30
+531944883: cap 0: End par conjunct: 0x2527bd0
+531945387: cap 0: running a local spark
+562630792: cap 1: End par conjunct: 0x251a430
+562631112: cap 1: Trying to steal a spark
+562631571: cap 1: stealing a spark from cap 0
+570400015: cap 3: End par conjunct: 0x251a490
+570400758: cap 3: Trying to steal a spark
+570401365: cap 3: stealing a spark from cap 0
+576937926: cap 2: End par conjunct: 0x251a4f0
+576938331: cap 2: Trying to steal a spark
+576938812: cap 2: stealing a spark from cap 0
+612735025: cap 1: End par conjunct: 0x251a550
+612735705: cap 1: Trying to steal a spark
+612736429: cap 1: stealing a spark from cap 0
+619791169: cap 3: End par conjunct: 0x251a5b0
+619791552: cap 3: Trying to steal a spark
+619792128: cap 3: stealing a spark from cap 0
+626189926: cap 2: End par conjunct: 0x251a610
+626190583: cap 2: Trying to steal a spark
+626191096: cap 2: stealing a spark from cap 0
+663484621: cap 1: End par conjunct: 0x251a670
+663484909: cap 1: Trying to steal a spark
+663485238: cap 1: stealing a spark from cap 0
+671033749: cap 3: End par conjunct: 0x251a6d0
+671034276: cap 3: Trying to steal a spark
+671034811: cap 3: stealing a spark from cap 0
+677780014: cap 2: End par conjunct: 0x251a730
+677780779: cap 2: Trying to steal a spark
+677781445: cap 2: stealing a spark from cap 0
+699230403: cap 0: End par conjunct: 0x2527bd0
+699230659: cap 0: End par conjunction: 0x2527bd0
+699230835: cap 0: End par conjunct: 0x2527b70
+699231397: cap 0: running a local spark
+717773436: cap 1: End par conjunct: 0x251a790
+717774057: cap 1: Trying to steal a spark
+717774921: cap 1: stealing a spark from cap 0
+726011095: cap 3: End par conjunct: 0x251a7f0
+726011635: cap 3: Trying to steal a spark
+726012076: cap 3: stealing a spark from cap 0
+730991659: cap 2: End par conjunct: 0x251a850
+730992199: cap 2: Trying to steal a spark
+730992726: cap 2: stealing a spark from cap 0
+774688756: cap 1: End par conjunct: 0x251a8b0
+774689584: cap 1: Trying to steal a spark
+774690183: cap 1: stealing a spark from cap 0
+781757100: cap 3: End par conjunct: 0x251a910
+781757734: cap 3: Trying to steal a spark
+781758225: cap 3: stealing a spark from cap 0
+785501482: cap 2: End par conjunct: 0x251a970
+785502193: cap 2: Trying to steal a spark
+785502751: cap 2: stealing a spark from cap 0
+829932813: cap 1: End par conjunct: 0x251a9d0
+829933366: cap 1: Trying to steal a spark
+829933677: cap 1: stealing a spark from cap 0
+837245920: cap 3: End par conjunct: 0x251aa30
+837246307: cap 3: Trying to steal a spark
+837246870: cap 3: stealing a spark from cap 0
+842193072: cap 2: End par conjunct: 0x251aa90
+842193535: cap 2: Trying to steal a spark
+842193999: cap 2: stealing a spark from cap 0
+865855660: cap 0: End par conjunct: 0x2527b70
+865855854: cap 0: End par conjunction: 0x2527b70
+865856250: cap 0: End par conjunct: 0x2527b10
+865856655: cap 0: running a local spark
+891740749: cap 1: End par conjunct: 0x251aaf0
+891741532: cap 1: Trying to steal a spark
+891742756: cap 1: stealing a spark from cap 0
+899877420: cap 3: End par conjunct: 0x251ab50
+899877951: cap 3: Trying to steal a spark
+899878387: cap 3: stealing a spark from cap 0
+904794669: cap 2: End par conjunct: 0x251abb0
+904795731: cap 2: Trying to steal a spark
+904796541: cap 2: stealing a spark from cap 0
+956212956: cap 1: End par conjunct: 0x251ac10
+956213617: cap 1: Trying to steal a spark
+956213982: cap 1: stealing a spark from cap 0
+965154496: cap 3: End par conjunct: 0x251ac70
+965154946: cap 3: Trying to steal a spark
+965155464: cap 3: stealing a spark from cap 0
+968214550: cap 2: End par conjunct: 0x251acd0
+968215018: cap 2: Trying to steal a spark
+968215549: cap 2: stealing a spark from cap 0
+1023491304: cap 1: End par conjunct: 0x251ad30
+1023492051: cap 1: Trying to steal a spark
+1023492964: cap 1: stealing a spark from cap 0
+1033080210: cap 0: End par conjunct: 0x2527b10
+1033080399: cap 0: End par conjunction: 0x2527b10
+1033080588: cap 0: End par conjunct: 0x2527ab0
+1033080961: cap 0: running a local spark
+1033241377: cap 3: End par conjunct: 0x251ad90
+1033241832: cap 3: Trying to steal a spark
+1033242088: cap 3: stealing a spark from cap 0
+1035608773: cap 2: End par conjunct: 0x251adf0
+1035609259: cap 2: Trying to steal a spark
+1035609754: cap 2: stealing a spark from cap 0
+1094081674: cap 1: End par conjunct: 0x251ae50
+1094082358: cap 1: Trying to steal a spark
+1094083029: cap 1: stealing a spark from cap 0
+1104048639: cap 3: End par conjunct: 0x251aeb0
+1104049210: cap 3: Trying to steal a spark
+1104049710: cap 3: stealing a spark from cap 0
+1106189802: cap 2: End par conjunct: 0x251af10
+1106190369: cap 2: Trying to steal a spark
+1106190873: cap 2: stealing a spark from cap 0
+1166137375: cap 1: End par conjunct: 0x251af70
+1166138239: cap 1: Trying to steal a spark
+1166138883: cap 1: stealing a spark from cap 0
+1176810660: cap 2: End par conjunct: 0x251b030
+1176811240: cap 2: Trying to steal a spark
+1176811735: cap 2: stealing a spark from cap 0
+1176898396: cap 3: End par conjunct: 0x251afd0
+1176898900: cap 3: Trying to steal a spark
+1176899553: cap 3: stealing a spark from cap 0
+1200629866: cap 0: End par conjunct: 0x2527ab0
+1200630069: cap 0: End par conjunction: 0x2527ab0
+1200630375: cap 0: End par conjunct: 0x2527a50
+1200630640: cap 0: running a local spark
+1240834045: cap 1: End par conjunct: 0x251b090
+1240834689: cap 1: Trying to steal a spark
+1240835539: cap 1: stealing a spark from cap 0
+1250312490: cap 2: End par conjunct: 0x251b0f0
+1250312809: cap 2: Trying to steal a spark
+1250313336: cap 2: stealing a spark from cap 0
+1252791828: cap 3: End par conjunct: 0x251b150
+1252792251: cap 3: Trying to steal a spark
+1252792773: cap 3: stealing a spark from cap 0
+1279191181: cap 1: stopping thread 4 (heap overflow)
+1279191564: cap 1: starting GC
+1279219414: cap 0: stopping thread 1 (thread yielding)
+1279228891: cap 3: stopping thread 3 (thread yielding)
+1279232685: cap 2: stopping thread 2 (thread yielding)
+1288309455: cap 3: running thread 3
+1288309464: cap 0: running thread 1
+1288379502: cap 2: running thread 2
+1288653435: cap 1: finished GC
+1288653723: cap 1: running thread 4
+1327831524: cap 1: End par conjunct: 0x251b1b0
+1327833261: cap 1: Trying to steal a spark
+1327835277: cap 1: stealing a spark from cap 0
+1336238419: cap 2: End par conjunct: 0x251b210
+1336239922: cap 2: Trying to steal a spark
+1336240854: cap 2: stealing a spark from cap 0
+1342275511: cap 3: End par conjunct: 0x251b270
+1342276861: cap 3: Trying to steal a spark
+1342278328: cap 3: stealing a spark from cap 0
+1377233797: cap 0: End par conjunct: 0x2527a50
+1377234085: cap 0: End par conjunction: 0x2527a50
+1377234360: cap 0: End par conjunct: 0x25279f0
+1377234999: cap 0: running a local spark
+1411012053: cap 1: End par conjunct: 0x251b2d0
+1411012948: cap 1: Trying to steal a spark
+1411014010: cap 1: stealing a spark from cap 0
+1416178687: cap 2: End par conjunct: 0x251b330
+1416179236: cap 2: Trying to steal a spark
+1416179596: cap 2: stealing a spark from cap 0
+1425281166: cap 3: End par conjunct: 0x251b390
+1425281638: cap 3: Trying to steal a spark
+1425282160: cap 3: stealing a spark from cap 0
+1495637941: cap 1: End par conjunct: 0x251b3f0
+1495639008: cap 1: Trying to steal a spark
+1495639872: cap 1: stealing a spark from cap 0
+1504078123: cap 2: End par conjunct: 0x251b450
+1504080297: cap 2: Trying to steal a spark
+1504082367: cap 2: stealing a spark from cap 0
+1510001185: cap 3: End par conjunct: 0x251b4b0
+1510001685: cap 3: Trying to steal a spark
+1510002126: cap 3: stealing a spark from cap 0
+1544941570: cap 0: End par conjunct: 0x25279f0
+1544941795: cap 0: End par conjunction: 0x25279f0
+1544941948: cap 0: End par conjunct: 0x2527990
+1544942205: cap 0: running a local spark
+1586146329: cap 1: End par conjunct: 0x251b510
+1586148417: cap 1: Trying to steal a spark
+1586150667: cap 1: stealing a spark from cap 0
+1595586420: cap 3: End par conjunct: 0x251b5d0
+1595586879: cap 3: Trying to steal a spark
+1595587329: cap 3: stealing a spark from cap 0
+1617022876: cap 2: End par conjunct: 0x251b570
+1617024591: cap 2: Trying to steal a spark
+1617026719: cap 2: stealing a spark from cap 0
+1672840125: cap 1: End par conjunct: 0x251b630
+1672842082: cap 1: Trying to steal a spark
+1672843959: cap 1: stealing a spark from cap 0
+1682179780: cap 3: End par conjunct: 0x251b690
+1682180307: cap 3: Trying to steal a spark
+1682180811: cap 3: stealing a spark from cap 0
+1712636509: cap 0: End par conjunct: 0x2527990
+1712636757: cap 0: End par conjunction: 0x2527990
+1712637067: cap 0: End par conjunct: 0x2527930
+1712637333: cap 0: running a local spark
+1713749616: cap 2: End par conjunct: 0x251b6f0
+1713751249: cap 2: Trying to steal a spark
+1713752950: cap 2: stealing a spark from cap 0
+1760724864: cap 1: End par conjunct: 0x251b750
+1760726002: cap 1: Trying to steal a spark
+1760727222: cap 1: stealing a spark from cap 0
+1768582786: cap 3: End par conjunct: 0x251b7b0
+1768583205: cap 3: Trying to steal a spark
+1768583812: cap 3: stealing a spark from cap 0
+1797995713: cap 2: End par conjunct: 0x251b810
+1797996865: cap 2: Trying to steal a spark
+1797998157: cap 2: stealing a spark from cap 0
+1847496091: cap 1: End par conjunct: 0x251b870
+1847496856: cap 1: Trying to steal a spark
+1847497662: cap 1: stealing a spark from cap 0
+1856177788: cap 3: End par conjunct: 0x251b8d0
+1856178396: cap 3: Trying to steal a spark
+1856178990: cap 3: stealing a spark from cap 0
+1879742844: cap 0: End par conjunct: 0x2527930
+1879743100: cap 0: End par conjunction: 0x2527930
+1879743289: cap 0: End par conjunct: 0x25278d0
+1879743667: cap 0: running a local spark
+1883263333: cap 2: End par conjunct: 0x251b930
+1883264202: cap 2: Trying to steal a spark
+1883265142: cap 2: stealing a spark from cap 0
+1937704716: cap 1: End par conjunct: 0x251b990
+1937705656: cap 1: Trying to steal a spark
+1937706174: cap 1: stealing a spark from cap 0
+1947000595: cap 3: End par conjunct: 0x251b9f0
+1947001081: cap 3: Trying to steal a spark
+1947001675: cap 3: stealing a spark from cap 0
+1972568475: cap 2: End par conjunct: 0x251ba50
+1972569087: cap 2: Trying to steal a spark
+1972569622: cap 2: stealing a spark from cap 0
+2030619109: cap 1: End par conjunct: 0x251bab0
+2030619519: cap 1: Trying to steal a spark
+2030619991: cap 1: stealing a spark from cap 0
+2040124135: cap 3: End par conjunct: 0x251bb10
+2040124612: cap 3: Trying to steal a spark
+2040125067: cap 3: stealing a spark from cap 0
+2062369093: cap 2: End par conjunct: 0x251bb70
+2062369728: cap 2: Trying to steal a spark
+2062370209: cap 2: stealing a spark from cap 0
+2078025511: cap 0: End par conjunct: 0x25278d0
+2078025673: cap 0: End par conjunction: 0x25278d0
+2078028985: cap 0: End par conjunct: 0x2527870
+2078029377: cap 0: running a local spark
+2124377307: cap 1: End par conjunct: 0x251bbd0
+2124378454: cap 1: Trying to steal a spark
+2124379426: cap 1: stealing a spark from cap 0
+2133988411: cap 3: End par conjunct: 0x251bc30
+2133988821: cap 3: Trying to steal a spark
+2133989334: cap 3: stealing a spark from cap 0
+2154847783: cap 2: End par conjunct: 0x251bc90
+2154848440: cap 2: Trying to steal a spark
+2154848980: cap 2: stealing a spark from cap 0
+2219288427: cap 1: End par conjunct: 0x251bcf0
+2219289138: cap 1: Trying to steal a spark
+2219289561: cap 1: stealing a spark from cap 0
+2229366276: cap 3: End par conjunct: 0x251bd50
+2229366739: cap 3: Trying to steal a spark
+2229367311: cap 3: stealing a spark from cap 0
+2243419969: cap 0: End par conjunct: 0x2527870
+2243420307: cap 0: End par conjunction: 0x2527870
+2243420500: cap 0: End par conjunct: 0x2527810
+2243420883: cap 0: running a local spark
+2247777301: cap 2: End par conjunct: 0x251bdb0
+2247777895: cap 2: Trying to steal a spark
+2247778597: cap 2: stealing a spark from cap 0
+2316280018: cap 1: End par conjunct: 0x251be10
+2316280662: cap 1: Trying to steal a spark
+2316281274: cap 1: stealing a spark from cap 0
+2325087283: cap 3: End par conjunct: 0x251be70
+2325087769: cap 3: Trying to steal a spark
+2325088224: cap 3: stealing a spark from cap 0
+2340641119: cap 2: End par conjunct: 0x251bed0
+2340641866: cap 2: Trying to steal a spark
+2340642622: cap 2: stealing a spark from cap 0
+2409047023: cap 0: End par conjunct: 0x2527810
+2409047343: cap 0: End par conjunction: 0x2527810
+2409047532: cap 0: End par conjunct: 0x25277b0
+2409047811: cap 0: running a local spark
+2412755536: cap 1: End par conjunct: 0x251bf30
+2412756139: cap 1: Trying to steal a spark
+2412756859: cap 1: stealing a spark from cap 0
+2422017855: cap 3: End par conjunct: 0x251bf90
+2422018314: cap 3: Trying to steal a spark
+2422018728: cap 3: stealing a spark from cap 0
+2434172382: cap 2: End par conjunct: 0x251bff0
+2434173223: cap 2: Trying to steal a spark
+2434173993: cap 2: stealing a spark from cap 0
+2510563581: cap 1: End par conjunct: 0x251c050
+2510565430: cap 1: Trying to steal a spark
+2510569161: cap 1: stealing a spark from cap 0
+2520040482: cap 3: End par conjunct: 0x251c0b0
+2520040959: cap 3: Trying to steal a spark
+2520041422: cap 3: stealing a spark from cap 0
+2558992500: cap 2: End par conjunct: 0x251c110
+2558994210: cap 2: Trying to steal a spark
+2558995884: cap 2: stealing a spark from cap 0
+2574399645: cap 0: End par conjunct: 0x25277b0
+2574399816: cap 0: End par conjunction: 0x25277b0
+2574399969: cap 0: End par conjunct: 0x2527750
+2574400347: cap 0: running a local spark
+2610752301: cap 1: End par conjunct: 0x251c170
+2610753934: cap 1: Trying to steal a spark
+2610755797: cap 1: stealing a spark from cap 0
+2620085427: cap 3: End par conjunct: 0x251c1d0
+2620086048: cap 3: Trying to steal a spark
+2620086768: cap 3: stealing a spark from cap 0
+2675306461: cap 2: End par conjunct: 0x251c230
+2675308347: cap 2: Trying to steal a spark
+2675309980: cap 2: stealing a spark from cap 0
+2714796225: cap 1: End par conjunct: 0x251c290
+2714797030: cap 1: Trying to steal a spark
+2714797593: cap 1: stealing a spark from cap 0
+2722951039: cap 3: End par conjunct: 0x251c2f0
+2722951467: cap 3: Trying to steal a spark
+2722952020: cap 3: stealing a spark from cap 0
+2739383973: cap 0: End par conjunct: 0x2527750
+2739384166: cap 0: End par conjunction: 0x2527750
+2739384342: cap 0: End par conjunct: 0x25276f0
+2739384837: cap 0: running a local spark
+2774395746: cap 2: End par conjunct: 0x251c350
+2774396821: cap 2: Trying to steal a spark
+2774397874: cap 2: stealing a spark from cap 0
+2823531642: cap 1: End par conjunct: 0x251c3b0
+2823532524: cap 1: Trying to steal a spark
+2823533046: cap 1: stealing a spark from cap 0
+2826237402: cap 3: End par conjunct: 0x251c410
+2826237888: cap 3: Trying to steal a spark
+2826238351: cap 3: stealing a spark from cap 0
+2875559067: cap 2: End par conjunct: 0x251c470
+2875559715: cap 2: Trying to steal a spark
+2875560331: cap 2: stealing a spark from cap 0
+2904336270: cap 0: End par conjunct: 0x25276f0
+2904336459: cap 0: End par conjunction: 0x25276f0
+2904336598: cap 0: End par conjunct: 0x2527690
+2904336945: cap 0: running a local spark
+2929743756: cap 1: End par conjunct: 0x251c4d0
+2929744462: cap 1: Trying to steal a spark
+2929745119: cap 1: stealing a spark from cap 0
+2932351546: cap 3: End par conjunct: 0x251c530
+2932351933: cap 3: Trying to steal a spark
+2932352451: cap 3: stealing a spark from cap 0
+2978596588: cap 2: End par conjunct: 0x251c590
+2978597187: cap 2: Trying to steal a spark
+2978598042: cap 2: stealing a spark from cap 0
+3035545497: cap 1: End par conjunct: 0x251c5f0
+3035546145: cap 1: Trying to steal a spark
+3035546662: cap 1: stealing a spark from cap 0
+3036216996: cap 3: End par conjunct: 0x251c650
+3036218197: cap 3: Trying to steal a spark
+3036218746: cap 3: stealing a spark from cap 0
+3070365034: cap 0: End par conjunct: 0x2527690
+3070365327: cap 0: End par conjunction: 0x2527690
+3070365502: cap 0: End par conjunct: 0x2527630
+3070365894: cap 0: running a local spark
+3079323792: cap 2: End par conjunct: 0x251c6b0
+3079324228: cap 2: Trying to steal a spark
+3079324786: cap 2: stealing a spark from cap 0
+3139956252: cap 3: End par conjunct: 0x251c770
+3139956657: cap 3: Trying to steal a spark
+3139957264: cap 3: stealing a spark from cap 0
+3140464482: cap 1: End par conjunct: 0x251c710
+3140465692: cap 1: Trying to steal a spark
+3140466867: cap 1: stealing a spark from cap 0
+3185762184: cap 2: End par conjunct: 0x251c7d0
+3185764056: cap 2: Trying to steal a spark
+3185766328: cap 2: stealing a spark from cap 0
+3236157738: cap 0: End par conjunct: 0x2527630
+3236157981: cap 0: End par conjunction: 0x2527630
+3236158165: cap 0: End par conjunct: 0x25275d0
+3236158624: cap 0: running a local spark
+3242741305: cap 3: End par conjunct: 0x251c830
+3242741967: cap 3: Trying to steal a spark
+3242742264: cap 3: stealing a spark from cap 0
+3244070614: cap 1: End par conjunct: 0x251c890
+3244073584: cap 1: Trying to steal a spark
+3244076878: cap 1: stealing a spark from cap 0
+3324819811: cap 2: End par conjunct: 0x251c8f0
+3324821854: cap 2: Trying to steal a spark
+3324823920: cap 2: stealing a spark from cap 0
+3346673485: cap 3: End par conjunct: 0x251c950
+3346673917: cap 3: Trying to steal a spark
+3346674444: cap 3: stealing a spark from cap 0
+3349538100: cap 1: End par conjunct: 0x251c9b0
+3349539823: cap 1: Trying to steal a spark
+3349542892: cap 1: stealing a spark from cap 0
+3401577553: cap 0: End par conjunct: 0x25275d0
+3401577796: cap 0: End par conjunction: 0x25275d0
+3401577976: cap 0: End par conjunct: 0x2527570
+3401578467: cap 0: running a local spark
+3438720855: cap 2: End par conjunct: 0x251ca10
+3438722511: cap 2: Trying to steal a spark
+3438724752: cap 2: stealing a spark from cap 0
+3450992944: cap 3: End par conjunct: 0x251ca70
+3450993430: cap 3: Trying to steal a spark
+3450993997: cap 3: stealing a spark from cap 0
+3455301627: cap 1: End par conjunct: 0x251cad0
+3455302590: cap 1: Trying to steal a spark
+3455303166: cap 1: stealing a spark from cap 0
+3540340399: cap 2: End par conjunct: 0x251cb30
+3540340863: cap 2: Trying to steal a spark
+3540341277: cap 2: stealing a spark from cap 0
+3555929610: cap 3: End par conjunct: 0x251cb90
+3555930127: cap 3: Trying to steal a spark
+3555930694: cap 3: stealing a spark from cap 0
+3560459175: cap 1: End par conjunct: 0x251cbf0
+3560459719: cap 1: Trying to steal a spark
+3560460259: cap 1: stealing a spark from cap 0
+3566313765: cap 0: End par conjunct: 0x2527570
+3566314080: cap 0: End par conjunction: 0x2527570
+3566314255: cap 0: End par conjunct: 0x2527510
+3566314651: cap 0: running a local spark
+3641768923: cap 2: End par conjunct: 0x251cc50
+3641769747: cap 2: Trying to steal a spark
+3641770408: cap 2: stealing a spark from cap 0
+3660900102: cap 3: End par conjunct: 0x251ccb0
+3660900511: cap 3: Trying to steal a spark
+3660900966: cap 3: stealing a spark from cap 0
+3665647633: cap 1: End par conjunct: 0x251cd10
+3665648443: cap 1: Trying to steal a spark
+3665648970: cap 1: stealing a spark from cap 0
+3730731097: cap 0: End par conjunct: 0x2527510
+3730731304: cap 0: End par conjunction: 0x2527510
+3730731480: cap 0: End par conjunct: 0x25274b0
+3730731885: cap 0: running a local spark
+3743352760: cap 2: End par conjunct: 0x251cd70
+3743353305: cap 2: Trying to steal a spark
+3743353944: cap 2: stealing a spark from cap 0
+3765799894: cap 3: End par conjunct: 0x251cdd0
+3765800340: cap 3: Trying to steal a spark
+3765800794: cap 3: stealing a spark from cap 0
+3771103450: cap 1: End par conjunct: 0x251ce30
+3771103918: cap 1: Trying to steal a spark
+3771104539: cap 1: stealing a spark from cap 0
+3850822485: cap 2: End par conjunct: 0x251ce90
+3850824190: cap 2: Trying to steal a spark
+3850826094: cap 2: stealing a spark from cap 0
+3871264050: cap 3: End par conjunct: 0x251cef0
+3871264590: cap 3: Trying to steal a spark
+3871265094: cap 3: stealing a spark from cap 0
+3878442486: cap 1: End par conjunct: 0x251cf50
+3878443377: cap 1: Trying to steal a spark
+3878444070: cap 1: stealing a spark from cap 0
+3895063317: cap 0: End par conjunct: 0x25274b0
+3895063519: cap 0: End par conjunction: 0x25274b0
+3895063668: cap 0: End par conjunct: 0x2527450
+3895064023: cap 0: running a local spark
+3977831736: cap 3: End par conjunct: 0x251d010
+3977832244: cap 3: Trying to steal a spark
+3977832685: cap 3: stealing a spark from cap 0
+3990236616: cap 2: End par conjunct: 0x251cfb0
+3990238492: cap 2: Trying to steal a spark
+3990240571: cap 2: stealing a spark from cap 0
+3991293468: cap 1: End par conjunct: 0x251d070
+3991294359: cap 1: Trying to steal a spark
+3991294746: cap 1: stealing a spark from cap 0
+4059510961: cap 0: End par conjunct: 0x2527450
+4059511191: cap 0: End par conjunction: 0x2527450
+4059511479: cap 0: End par conjunct: 0x25273f0
+4059511938: cap 0: running a local spark
+4084069900: cap 3: End par conjunct: 0x251d0d0
+4084070413: cap 3: Trying to steal a spark
+4084070827: cap 3: stealing a spark from cap 0
+4098127671: cap 1: End par conjunct: 0x251d190
+4098129345: cap 1: Trying to steal a spark
+4098131190: cap 1: stealing a spark from cap 0
+4100764009: cap 2: End par conjunct: 0x251d130
+4100764720: cap 2: Trying to steal a spark
+4100765107: cap 2: stealing a spark from cap 0
+4189030627: cap 3: End par conjunct: 0x251d1f0
+4189031041: cap 3: Trying to steal a spark
+4189031622: cap 3: stealing a spark from cap 0
+4202895316: cap 1: End par conjunct: 0x251d250
+4202896761: cap 1: Trying to steal a spark
+4202897868: cap 1: stealing a spark from cap 0
+4203368370: cap 2: End par conjunct: 0x251d2b0
+4203369009: cap 2: Trying to steal a spark
+4203369432: cap 2: stealing a spark from cap 0
+4224118374: cap 0: End par conjunct: 0x25273f0
+4224118594: cap 0: End par conjunction: 0x25273f0
+4224118779: cap 0: End par conjunct: 0x2527390
+4224119193: cap 0: running a local spark
+4293500643: cap 3: End par conjunct: 0x251d310
+4293501210: cap 3: Trying to steal a spark
+4293501547: cap 3: stealing a spark from cap 0
+4303451088: cap 2: End par conjunct: 0x251d3d0
+4303451740: cap 2: Trying to steal a spark
+4303452370: cap 2: stealing a spark from cap 0
+4306702729: cap 1: End par conjunct: 0x251d370
+4306703229: cap 1: Trying to steal a spark
+4306703593: cap 1: stealing a spark from cap 0
+4388432976: cap 0: End par conjunct: 0x2527390
+4388433246: cap 0: End par conjunction: 0x2527390
+4388433552: cap 0: End par conjunct: 0x2527330
+4388433889: cap 0: running a local spark
+4396328653: cap 3: End par conjunct: 0x251d430
+4396329103: cap 3: Trying to steal a spark
+4396329517: cap 3: stealing a spark from cap 0
+4403295733: cap 2: End par conjunct: 0x251d490
+4403296300: cap 2: Trying to steal a spark
+4403297182: cap 2: stealing a spark from cap 0
+4410306522: cap 1: End par conjunct: 0x251d4f0
+4410306877: cap 1: Trying to steal a spark
+4410307246: cap 1: stealing a spark from cap 0
+4499511997: cap 3: End par conjunct: 0x251d550
+4499512465: cap 3: Trying to steal a spark
+4499512956: cap 3: stealing a spark from cap 0
+4502380810: cap 2: End par conjunct: 0x251d5b0
+4502381359: cap 2: Trying to steal a spark
+4502381818: cap 2: stealing a spark from cap 0
+4512594357: cap 1: End par conjunct: 0x251d610
+4512594910: cap 1: Trying to steal a spark
+4512595275: cap 1: stealing a spark from cap 0
+4552369659: cap 0: End par conjunct: 0x2527330
+4552369816: cap 0: End par conjunction: 0x2527330
+4552369951: cap 0: End par conjunct: 0x25272d0
+4552370226: cap 0: running a local spark
+4600086066: cap 3: End par conjunct: 0x251d670
+4600086556: cap 3: Trying to steal a spark
+4600086817: cap 3: stealing a spark from cap 0
+4604659614: cap 2: End par conjunct: 0x251d6d0
+4604661180: cap 2: Trying to steal a spark
+4604662786: cap 2: stealing a spark from cap 0
+4612849681: cap 1: End par conjunct: 0x251d730
+4612850379: cap 1: Trying to steal a spark
+4612850883: cap 1: stealing a spark from cap 0
+4699006281: cap 3: End par conjunct: 0x251d790
+4699006843: cap 3: Trying to steal a spark
+4699007370: cap 3: stealing a spark from cap 0
+4710339432: cap 1: End par conjunct: 0x251d850
+4710341389: cap 1: Trying to steal a spark
+4710343032: cap 1: stealing a spark from cap 0
+4716631368: cap 0: End par conjunct: 0x25272d0
+4716631579: cap 0: End par conjunction: 0x25272d0
+4716631741: cap 0: End par conjunct: 0x2527270
+4716632142: cap 0: running a local spark
+4735995192: cap 2: End par conjunct: 0x251d7f0
+4735995916: cap 2: Trying to steal a spark
+4735996753: cap 2: stealing a spark from cap 0
+4802625774: cap 1: End par conjunct: 0x251d910
+4802627380: cap 1: Trying to steal a spark
+4802629302: cap 1: stealing a spark from cap 0
+4805334769: cap 3: End par conjunct: 0x251d8b0
+4805336542: cap 3: Trying to steal a spark
+4805338437: cap 3: stealing a spark from cap 0
+4831134097: cap 2: End par conjunct: 0x251d970
+4831134948: cap 2: Trying to steal a spark
+4831135785: cap 2: stealing a spark from cap 0
+4880466819: cap 0: End par conjunct: 0x2527270
+4880467201: cap 0: End par conjunction: 0x2527270
+4880467507: cap 0: End par conjunct: 0x2527210
+4880467917: cap 0: running a local spark
+4894799611: cap 1: End par conjunct: 0x251d9d0
+4894800457: cap 1: Trying to steal a spark
+4894801132: cap 1: stealing a spark from cap 0
+4896399325: cap 3: End par conjunct: 0x251da30
+4896399721: cap 3: Trying to steal a spark
+4896400383: cap 3: stealing a spark from cap 0
+4919787211: cap 2: End par conjunct: 0x251da90
+4919787738: cap 2: Trying to steal a spark
+4919788192: cap 2: stealing a spark from cap 0
+4987284781: cap 1: End par conjunct: 0x251daf0
+4987285263: cap 1: Trying to steal a spark
+4987285713: cap 1: stealing a spark from cap 0
+4988328228: cap 3: End par conjunct: 0x251db50
+4988328700: cap 3: Trying to steal a spark
+4988329227: cap 3: stealing a spark from cap 0
+5009116779: cap 2: End par conjunct: 0x251dbb0
+5009117323: cap 2: Trying to steal a spark
+5009117805: cap 2: stealing a spark from cap 0
+5044457664: cap 0: End par conjunct: 0x2527210
+5044458010: cap 0: End par conjunction: 0x2527210
+5044458235: cap 0: End par conjunct: 0x25271b0
+5044458622: cap 0: running a local spark
+5080150813: cap 1: End par conjunct: 0x251dc10
+5080151259: cap 1: Trying to steal a spark
+5080151767: cap 1: stealing a spark from cap 0
+5081340006: cap 3: End par conjunct: 0x251dc70
+5081340672: cap 3: Trying to steal a spark
+5081341099: cap 3: stealing a spark from cap 0
+5099104935: cap 2: End par conjunct: 0x251dcd0
+5099105610: cap 2: Trying to steal a spark
+5099106096: cap 2: stealing a spark from cap 0
+5174841456: cap 3: End par conjunct: 0x251dd90
+5174841910: cap 3: Trying to steal a spark
+5174842351: cap 3: stealing a spark from cap 0
+5179632331: cap 1: End par conjunct: 0x251dd30
+5179633258: cap 1: Trying to steal a spark
+5179634032: cap 1: stealing a spark from cap 0
+5190281595: cap 2: End par conjunct: 0x251ddf0
+5190282031: cap 2: Trying to steal a spark
+5190282355: cap 2: stealing a spark from cap 0
+5208519726: cap 0: End par conjunct: 0x25271b0
+5208519951: cap 0: End par conjunction: 0x25271b0
+5208520212: cap 0: End par conjunct: 0x2527150
+5208520594: cap 0: running a local spark
+5269359082: cap 3: End par conjunct: 0x251de50
+5269359537: cap 3: Trying to steal a spark
+5269359901: cap 3: stealing a spark from cap 0
+5274835857: cap 1: End par conjunct: 0x251deb0
+5274836505: cap 1: Trying to steal a spark
+5274837094: cap 1: stealing a spark from cap 0
+5282239549: cap 2: End par conjunct: 0x251df10
+5282239977: cap 2: Trying to steal a spark
+5282240287: cap 2: stealing a spark from cap 0
+5364891751: cap 3: End par conjunct: 0x251df70
+5364892188: cap 3: Trying to steal a spark
+5364892642: cap 3: stealing a spark from cap 0
+5371093939: cap 1: End par conjunct: 0x251dfd0
+5371094565: cap 1: Trying to steal a spark
+5371095226: cap 1: stealing a spark from cap 0
+5372349538: cap 0: End par conjunct: 0x2527150
+5372349732: cap 0: End par conjunction: 0x2527150
+5372349907: cap 0: End par conjunct: 0x25270f0
+5372350204: cap 0: running a local spark
+5375287273: cap 2: End par conjunct: 0x251e030
+5375287737: cap 2: Trying to steal a spark
+5375288263: cap 2: stealing a spark from cap 0
+5460822751: cap 3: End par conjunct: 0x251e090
+5460823359: cap 3: Trying to steal a spark
+5460824029: cap 3: stealing a spark from cap 0
+5468675634: cap 1: End par conjunct: 0x251e0f0
+5468677600: cap 1: Trying to steal a spark
+5468679922: cap 1: stealing a spark from cap 0
+5511468537: cap 2: End par conjunct: 0x251e150
+5511470931: cap 2: Trying to steal a spark
+5511472380: cap 2: stealing a spark from cap 0
+5536802232: cap 0: End par conjunct: 0x25270f0
+5536802448: cap 0: End par conjunction: 0x25270f0
+5536802619: cap 0: End par conjunct: 0x2527090
+5536802916: cap 0: running a local spark
+5558417905: cap 3: End par conjunct: 0x251e1b0
+5558418310: cap 3: Trying to steal a spark
+5558418571: cap 3: stealing a spark from cap 0
+5566822195: cap 1: End par conjunct: 0x251e210
+5566823829: cap 1: Trying to steal a spark
+5566825089: cap 1: stealing a spark from cap 0
+5613784794: cap 2: End par conjunct: 0x251e270
+5613786652: cap 2: Trying to steal a spark
+5613788389: cap 2: stealing a spark from cap 0
+5656165357: cap 3: End par conjunct: 0x251e2d0
+5656165731: cap 3: Trying to steal a spark
+5656166226: cap 3: stealing a spark from cap 0
+5667148989: cap 1: End par conjunct: 0x251e330
+5667150114: cap 1: Trying to steal a spark
+5667151266: cap 1: stealing a spark from cap 0
+5702150182: cap 0: End par conjunct: 0x2527090
+5702150398: cap 0: End par conjunction: 0x2527090
+5702150677: cap 0: End par conjunct: 0x2527030
+5702151082: cap 0: running a local spark
+5710287978: cap 2: End par conjunct: 0x251e390
+5710288504: cap 2: Trying to steal a spark
+5710289094: cap 2: stealing a spark from cap 0
+5755608112: cap 3: End par conjunct: 0x251e3f0
+5755608495: cap 3: Trying to steal a spark
+5755608940: cap 3: stealing a spark from cap 0
+5767399530: cap 1: End par conjunct: 0x251e450
+5767400074: cap 1: Trying to steal a spark
+5767400655: cap 1: stealing a spark from cap 0
+5806750243: cap 2: End par conjunct: 0x251e4b0
+5806750702: cap 2: Trying to steal a spark
+5806751017: cap 2: stealing a spark from cap 0
+5854923580: cap 3: End par conjunct: 0x251e510
+5854924039: cap 3: Trying to steal a spark
+5854924462: cap 3: stealing a spark from cap 0
+5867308777: cap 1: End par conjunct: 0x251e570
+5867309322: cap 1: Trying to steal a spark
+5867309866: cap 1: stealing a spark from cap 0
+5868694615: cap 0: End par conjunct: 0x2527030
+5868694818: cap 0: End par conjunction: 0x2527030
+5868694980: cap 0: End par conjunct: 0x2526fd0
+5868695389: cap 0: running a local spark
+5903779621: cap 2: End par conjunct: 0x251e5d0
+5903780049: cap 2: Trying to steal a spark
+5903780517: cap 2: stealing a spark from cap 0
+5955976417: cap 3: End par conjunct: 0x251e630
+5955976791: cap 3: Trying to steal a spark
+5955977236: cap 3: stealing a spark from cap 0
+5969468290: cap 1: End par conjunct: 0x251e690
+5969468898: cap 1: Trying to steal a spark
+5969469487: cap 1: stealing a spark from cap 0
+6002940645: cap 2: End par conjunct: 0x251e6f0
+6002940960: cap 2: Trying to steal a spark
+6002941293: cap 2: stealing a spark from cap 0
+6036253218: cap 0: End par conjunct: 0x2526fd0
+6036253488: cap 0: End par conjunction: 0x2526fd0
+6036253771: cap 0: End par conjunct: 0x2526f70
+6036254190: cap 0: running a local spark
+6058467171: cap 3: End par conjunct: 0x251e750
+6058467612: cap 3: Trying to steal a spark
+6058467877: cap 3: stealing a spark from cap 0
+6073172662: cap 1: End par conjunct: 0x251e7b0
+6073173180: cap 1: Trying to steal a spark
+6073173729: cap 1: stealing a spark from cap 0
+6102897106: cap 2: End par conjunct: 0x251e810
+6102897525: cap 2: Trying to steal a spark
+6102897934: cap 2: stealing a spark from cap 0
+6161465551: cap 3: End par conjunct: 0x251e870
+6161465925: cap 3: Trying to steal a spark
+6161466361: cap 3: stealing a spark from cap 0
+6176467750: cap 1: End par conjunct: 0x251e8d0
+6176468272: cap 1: Trying to steal a spark
+6176468862: cap 1: stealing a spark from cap 0
+6202076346: cap 2: End par conjunct: 0x251e930
+6202076782: cap 2: Trying to steal a spark
+6202077183: cap 2: stealing a spark from cap 0
+6202608786: cap 0: End par conjunct: 0x2526f70
+6202608993: cap 0: End par conjunction: 0x2526f70
+6202609159: cap 0: End par conjunct: 0x2526f10
+6202609461: cap 0: running a local spark
+6264545985: cap 3: End par conjunct: 0x251e990
+6264546435: cap 3: Trying to steal a spark
+6264546718: cap 3: stealing a spark from cap 0
+6280029117: cap 1: End par conjunct: 0x251e9f0
+6280030134: cap 1: Trying to steal a spark
+6280031272: cap 1: stealing a spark from cap 0
+6302836035: cap 2: End par conjunct: 0x251ea50
+6302836521: cap 2: Trying to steal a spark
+6302837034: cap 2: stealing a spark from cap 0
+6364841238: cap 0: End par conjunct: 0x2526f10
+6364841436: cap 0: End par conjunction: 0x2526f10
+6364841580: cap 0: End par conjunct: 0x2526eb0
+6364841931: cap 0: running a local spark
+6368895904: cap 3: End par conjunct: 0x251eab0
+6368896278: cap 3: Trying to steal a spark
+6368896660: cap 3: stealing a spark from cap 0
+6391330479: cap 1: End par conjunct: 0x251eb10
+6391331721: cap 1: Trying to steal a spark
+6391332729: cap 1: stealing a spark from cap 0
+6406162888: cap 2: End par conjunct: 0x251eb70
+6406163248: cap 2: Trying to steal a spark
+6406163586: cap 2: stealing a spark from cap 0
+6475439569: cap 3: End par conjunct: 0x251ebd0
+6475440010: cap 3: Trying to steal a spark
+6475440442: cap 3: stealing a spark from cap 0
+6498971127: cap 1: End par conjunct: 0x251ec30
+6498971671: cap 1: Trying to steal a spark
+6498972477: cap 1: stealing a spark from cap 0
+6510126928: cap 2: End par conjunct: 0x251ec90
+6510127342: cap 2: Trying to steal a spark
+6510127675: cap 2: stealing a spark from cap 0
+6532580326: cap 0: End par conjunct: 0x2526eb0
+6532580713: cap 0: End par conjunction: 0x2526eb0
+6532580866: cap 0: End par conjunct: 0x2526e50
+6532581163: cap 0: running a local spark
+6583930695: cap 3: End par conjunct: 0x251ecf0
+6583931239: cap 3: Trying to steal a spark
+6583931568: cap 3: stealing a spark from cap 0
+6607367370: cap 1: End par conjunct: 0x251ed50
+6607367905: cap 1: Trying to steal a spark
+6607368616: cap 1: stealing a spark from cap 0
+6615017739: cap 2: End par conjunct: 0x251edb0
+6615018261: cap 2: Trying to steal a spark
+6615018598: cap 2: stealing a spark from cap 0
+6692534527: cap 3: End par conjunct: 0x251ee10
+6692535103: cap 3: Trying to steal a spark
+6692535679: cap 3: stealing a spark from cap 0
+6700865737: cap 0: End par conjunct: 0x2526e50
+6700865953: cap 0: End par conjunction: 0x2526e50
+6700866138: cap 0: End par conjunct: 0x2526df0
+6700866475: cap 0: running a local spark
+6716408625: cap 1: End par conjunct: 0x251ee70
+6716409237: cap 1: Trying to steal a spark
+6716410335: cap 1: stealing a spark from cap 0
+6720467719: cap 2: End par conjunct: 0x251eed0
+6720468286: cap 2: Trying to steal a spark
+6720468646: cap 2: stealing a spark from cap 0
+6806783403: cap 3: End par conjunct: 0x251ef30
+6806785135: cap 3: Trying to steal a spark
+6806786967: cap 3: stealing a spark from cap 0
+6823963629: cap 2: End par conjunct: 0x251eff0
+6823964236: cap 2: Trying to steal a spark
+6823964790: cap 2: stealing a spark from cap 0
+6825203406: cap 1: End par conjunct: 0x251ef90
+6825203973: cap 1: Trying to steal a spark
+6825204369: cap 1: stealing a spark from cap 0
+6869104015: cap 0: End par conjunct: 0x2526df0
+6869104672: cap 0: End par conjunction: 0x2526df0
+6869105190: cap 0: End par conjunct: 0x2526d90
+6869106378: cap 0: running a local spark
+6928249585: cap 2: End par conjunct: 0x251f0b0
+6928249995: cap 2: Trying to steal a spark
+6928250413: cap 2: stealing a spark from cap 0
+6933589821: cap 1: End par conjunct: 0x251f110
+6933590262: cap 1: Trying to steal a spark
+6933590635: cap 1: stealing a spark from cap 0
+6956958510: cap 3: End par conjunct: 0x251f050
+6956960251: cap 3: Trying to steal a spark
+6956962425: cap 3: stealing a spark from cap 0
+7033972122: cap 2: End par conjunct: 0x251f170
+7033973503: cap 2: Trying to steal a spark
+7033974840: cap 2: stealing a spark from cap 0
+7037497476: cap 0: End par conjunct: 0x2526d90
+7037497863: cap 0: End par conjunction: 0x2526d90
+7037498353: cap 0: End par conjunct: 0x2526d30
+7037498799: cap 0: running a local spark
+7043018242: cap 1: End par conjunct: 0x251f1d0
+7043018877: cap 1: Trying to steal a spark
+7043019408: cap 1: stealing a spark from cap 0
+7065907465: cap 3: End par conjunct: 0x251f230
+7065907906: cap 3: Trying to steal a spark
+7065908442: cap 3: stealing a spark from cap 0
+7139790391: cap 2: End par conjunct: 0x251f290
+7139791053: cap 2: Trying to steal a spark
+7139791656: cap 2: stealing a spark from cap 0
+7154419621: cap 1: End par conjunct: 0x251f2f0
+7154420130: cap 1: Trying to steal a spark
+7154420463: cap 1: stealing a spark from cap 0
+7178493060: cap 3: End par conjunct: 0x251f350
+7178493568: cap 3: Trying to steal a spark
+7178494023: cap 3: stealing a spark from cap 0
+7205940342: cap 0: End par conjunct: 0x2526d30
+7205940661: cap 0: End par conjunction: 0x2526d30
+7205940810: cap 0: End par conjunct: 0x2526cd0
+7205941197: cap 0: running a local spark
+7249679901: cap 2: End par conjunct: 0x251f3b0
+7249680679: cap 2: Trying to steal a spark
+7249681525: cap 2: stealing a spark from cap 0
+7270700197: cap 1: End par conjunct: 0x251f410
+7270700742: cap 1: Trying to steal a spark
+7270701111: cap 1: stealing a spark from cap 0
+7294506664: cap 3: End par conjunct: 0x251f470
+7294507105: cap 3: Trying to steal a spark
+7294507659: cap 3: stealing a spark from cap 0
+7362194377: cap 2: End par conjunct: 0x251f4d0
+7362195111: cap 2: Trying to steal a spark
+7362195624: cap 2: stealing a spark from cap 0
+7374448426: cap 0: End par conjunct: 0x2526cd0
+7374448746: cap 0: End par conjunction: 0x2526cd0
+7374448917: cap 0: End par conjunct: 0x2526c70
+7374449488: cap 0: running a local spark
+7388212914: cap 1: End par conjunct: 0x251f530
+7388214682: cap 1: Trying to steal a spark
+7388216793: cap 1: stealing a spark from cap 0
+7409992662: cap 3: End par conjunct: 0x251f590
+7409993112: cap 3: Trying to steal a spark
+7409993548: cap 3: stealing a spark from cap 0
+7505717877: cap 1: End par conjunct: 0x251f650
+7505719911: cap 1: Trying to steal a spark
+7505722413: cap 1: stealing a spark from cap 0
+7516908211: cap 2: End par conjunct: 0x251f5f0
+7516909035: cap 2: Trying to steal a spark
+7516909422: cap 2: stealing a spark from cap 0
+7526619144: cap 3: End par conjunct: 0x251f6b0
+7526619607: cap 3: Trying to steal a spark
+7526620030: cap 3: stealing a spark from cap 0
+7542900904: cap 0: End par conjunct: 0x2526c70
+7542901093: cap 0: End par conjunction: 0x2526c70
+7542901233: cap 0: End par conjunct: 0x2526c10
+7542901593: cap 0: running a local spark
+7629785779: cap 1: End par conjunct: 0x251f710
+7629787647: cap 1: Trying to steal a spark
+7629789586: cap 1: stealing a spark from cap 0
+7638019537: cap 2: End par conjunct: 0x251f770
+7638020248: cap 2: Trying to steal a spark
+7638020640: cap 2: stealing a spark from cap 0
+7644842095: cap 3: End par conjunct: 0x251f7d0
+7644842563: cap 3: Trying to steal a spark
+7644843103: cap 3: stealing a spark from cap 0
+7711580452: cap 0: End par conjunct: 0x2526c10
+7711580659: cap 0: End par conjunction: 0x2526c10
+7711580830: cap 0: End par conjunct: 0x2526bb0
+7711581078: cap 0: running a local spark
+7748250741: cap 1: End par conjunct: 0x251f830
+7748251834: cap 1: Trying to steal a spark
+7748253274: cap 1: stealing a spark from cap 0
+7752907786: cap 2: End par conjunct: 0x251f890
+7752908403: cap 2: Trying to steal a spark
+7752908754: cap 2: stealing a spark from cap 0
+7762712247: cap 3: End par conjunct: 0x251f8f0
+7762712625: cap 3: Trying to steal a spark
+7762713061: cap 3: stealing a spark from cap 0
+7866824067: cap 1: End par conjunct: 0x251f950
+7866824791: cap 1: Trying to steal a spark
+7866825435: cap 1: stealing a spark from cap 0
+7868129994: cap 2: End par conjunct: 0x251f9b0
+7868130318: cap 2: Trying to steal a spark
+7868130660: cap 2: stealing a spark from cap 0
+7880553090: cap 0: End par conjunct: 0x2526bb0
+7880553283: cap 0: End par conjunction: 0x2526bb0
+7880553571: cap 0: End par conjunct: 0x2526b50
+7880553886: cap 0: running a local spark
+7881310125: cap 3: End par conjunct: 0x251fa10
+7881310575: cap 3: Trying to steal a spark
+7881310930: cap 3: stealing a spark from cap 0
+7983051835: cap 2: End par conjunct: 0x251fad0
+7983052690: cap 2: Trying to steal a spark
+7983053311: cap 2: stealing a spark from cap 0
+7986387316: cap 1: End par conjunct: 0x251fa70
+7986387856: cap 1: Trying to steal a spark
+7986388225: cap 1: stealing a spark from cap 0
+7999363462: cap 3: End par conjunct: 0x251fb30
+7999363831: cap 3: Trying to steal a spark
+7999364371: cap 3: stealing a spark from cap 0
+8049000447: cap 0: End par conjunct: 0x2526b50
+8049000636: cap 0: End par conjunction: 0x2526b50
+8049000807: cap 0: End par conjunct: 0x2526af0
+8049001171: cap 0: running a local spark
+8097602877: cap 2: End par conjunct: 0x251fb90
+8097603786: cap 2: Trying to steal a spark
+8097604686: cap 2: stealing a spark from cap 0
+8105726808: cap 1: End par conjunct: 0x251fbf0
+8105727348: cap 1: Trying to steal a spark
+8105727708: cap 1: stealing a spark from cap 0
+8122236853: cap 3: End par conjunct: 0x251fc50
+8122238694: cap 3: Trying to steal a spark
+8122240728: cap 3: stealing a spark from cap 0
+8209894459: cap 2: End par conjunct: 0x251fcb0
+8209895179: cap 2: Trying to steal a spark
+8209895760: cap 2: stealing a spark from cap 0
+8217917545: cap 0: End par conjunct: 0x2526af0
+8217918414: cap 0: End par conjunction: 0x2526af0
+8217918882: cap 0: End par conjunct: 0x2526a90
+8217919912: cap 0: running a local spark
+8222221260: cap 1: End par conjunct: 0x251fd10
+8222221822: cap 1: Trying to steal a spark
+8222222331: cap 1: stealing a spark from cap 0
+8274741862: cap 3: End par conjunct: 0x251fd70
+8274743266: cap 3: Trying to steal a spark
+8274745170: cap 3: stealing a spark from cap 0
+8322421567: cap 2: End par conjunct: 0x251fdd0
+8322422215: cap 2: Trying to steal a spark
+8322422940: cap 2: stealing a spark from cap 0
+8338848345: cap 1: End par conjunct: 0x251fe30
+8338848705: cap 1: Trying to steal a spark
+8338849056: cap 1: stealing a spark from cap 0
+8387412912: cap 0: End par conjunct: 0x2526a90
+8387413497: cap 0: End par conjunction: 0x2526a90
+8387414005: cap 0: End par conjunct: 0x2526a30
+8387415427: cap 0: running a local spark
+8397977359: cap 3: End par conjunct: 0x251fe90
+8397978768: cap 3: Trying to steal a spark
+8397980046: cap 3: stealing a spark from cap 0
+8435992648: cap 2: End par conjunct: 0x251fef0
+8435993760: cap 2: Trying to steal a spark
+8435994781: cap 2: stealing a spark from cap 0
+8456515038: cap 1: End par conjunct: 0x251ff50
+8456515564: cap 1: Trying to steal a spark
+8456515929: cap 1: stealing a spark from cap 0
+8514977890: cap 3: End par conjunct: 0x251ffb0
+8514978282: cap 3: Trying to steal a spark
+8514978934: cap 3: stealing a spark from cap 0
+8550261373: cap 2: End par conjunct: 0x2520010
+8550261990: cap 2: Trying to steal a spark
+8550262786: cap 2: stealing a spark from cap 0
+8556870406: cap 0: End par conjunct: 0x2526a30
+8556870582: cap 0: End par conjunction: 0x2526a30
+8556870753: cap 0: End par conjunct: 0x25269d0
+8556871288: cap 0: running a local spark
+8574920581: cap 1: End par conjunct: 0x2520070
+8574921054: cap 1: Trying to steal a spark
+8574921639: cap 1: stealing a spark from cap 0
+8633149510: cap 3: End par conjunct: 0x25200d0
+8633150113: cap 3: Trying to steal a spark
+8633150716: cap 3: stealing a spark from cap 0
+8664787926: cap 2: End par conjunct: 0x2520130
+8664788367: cap 2: Trying to steal a spark
+8664789078: cap 2: stealing a spark from cap 0
+8694223839: cap 1: End par conjunct: 0x2520190
+8694224397: cap 1: Trying to steal a spark
+8694224788: cap 1: stealing a spark from cap 0
+8726062792: cap 0: End par conjunct: 0x25269d0
+8726062995: cap 0: End par conjunction: 0x25269d0
+8726063166: cap 0: End par conjunct: 0x2526970
+8726063571: cap 0: running a local spark
+8752188550: cap 3: End par conjunct: 0x25201f0
+8752189995: cap 3: Trying to steal a spark
+8752191502: cap 3: stealing a spark from cap 0
+8780949805: cap 2: End par conjunct: 0x2520250
+8780951065: cap 2: Trying to steal a spark
+8780952100: cap 2: stealing a spark from cap 0
+8819446338: cap 1: End par conjunct: 0x25202b0
+8819447175: cap 1: Trying to steal a spark
+8819447544: cap 1: stealing a spark from cap 0
+8871555856: cap 3: End par conjunct: 0x2520310
+8871557584: cap 3: Trying to steal a spark
+8871559020: cap 3: stealing a spark from cap 0
+8896779094: cap 2: End par conjunct: 0x2520370
+8896779801: cap 2: Trying to steal a spark
+8896780467: cap 2: stealing a spark from cap 0
+8937728199: cap 0: End par conjunct: 0x2526970
+8937728946: cap 0: End par conjunction: 0x2526970
+8937729603: cap 0: End par conjunct: 0x2526910
+8937730624: cap 0: running a local spark
+8941134757: cap 1: End par conjunct: 0x25203d0
+8941135234: cap 1: Trying to steal a spark
+8941135860: cap 1: stealing a spark from cap 0
+8994217396: cap 3: End par conjunct: 0x2520430
+8994218571: cap 3: Trying to steal a spark
+8994220483: cap 3: stealing a spark from cap 0
+9016329973: cap 2: End par conjunct: 0x2520490
+9016330657: cap 2: Trying to steal a spark
+9016331319: cap 2: stealing a spark from cap 0
+9065391511: cap 1: End par conjunct: 0x25204f0
+9065392182: cap 1: Trying to steal a spark
+9065392542: cap 1: stealing a spark from cap 0
+9114060033: cap 0: End par conjunct: 0x2526910
+9114061369: cap 0: End par conjunction: 0x2526910
+9114062017: cap 0: End par conjunct: 0x25268b0
+9114063439: cap 0: running a local spark
+9118985994: cap 3: End par conjunct: 0x2520550
+9118987276: cap 3: Trying to steal a spark
+9118988649: cap 3: stealing a spark from cap 0
+9137965891: cap 2: End par conjunct: 0x25205b0
+9137966944: cap 2: Trying to steal a spark
+9137967768: cap 2: stealing a spark from cap 0
+9190963782: cap 1: End par conjunct: 0x2520610
+9190964430: cap 1: Trying to steal a spark
+9190964794: cap 1: stealing a spark from cap 0
+9244042654: cap 3: End par conjunct: 0x2520670
+9244043077: cap 3: Trying to steal a spark
+9244043527: cap 3: stealing a spark from cap 0
+9259115341: cap 2: End par conjunct: 0x25206d0
+9259115881: cap 2: Trying to steal a spark
+9259116448: cap 2: stealing a spark from cap 0
+9316672281: cap 1: End par conjunct: 0x2520730
+9316672717: cap 1: Trying to steal a spark
+9316673172: cap 1: stealing a spark from cap 0
+9318656340: cap 0: End par conjunct: 0x25268b0
+9318656502: cap 0: End par conjunction: 0x25268b0
+9318656637: cap 0: End par conjunct: 0x2526850
+9318656965: cap 0: running a local spark
+9369180099: cap 3: End par conjunct: 0x2520790
+9369180544: cap 3: Trying to steal a spark
+9369180931: cap 3: stealing a spark from cap 0
+9383760999: cap 2: End par conjunct: 0x25207f0
+9383761741: cap 2: Trying to steal a spark
+9383762263: cap 2: stealing a spark from cap 0
+9449296929: cap 1: End par conjunct: 0x2520850
+9449297469: cap 1: Trying to steal a spark
+9449297946: cap 1: stealing a spark from cap 0
+9485841762: cap 0: End par conjunct: 0x2526850
+9485841924: cap 0: End par conjunction: 0x2526850
+9485842077: cap 0: End par conjunct: 0x25267f0
+9485842509: cap 0: running a local spark
+9502258122: cap 3: End par conjunct: 0x25208b0
+9502258671: cap 3: Trying to steal a spark
+9502258995: cap 3: stealing a spark from cap 0
+9514881801: cap 2: End par conjunct: 0x2520910
+9514882534: cap 2: Trying to steal a spark
+9514883137: cap 2: stealing a spark from cap 0
+9586031359: cap 1: End par conjunct: 0x2520970
+9586031724: cap 1: Trying to steal a spark
+9586032093: cap 1: stealing a spark from cap 0
+9638764969: cap 3: End par conjunct: 0x25209d0
+9638765464: cap 3: Trying to steal a spark
+9638765941: cap 3: stealing a spark from cap 0
+9651997687: cap 0: End par conjunct: 0x25267f0
+9651998029: cap 0: End par conjunction: 0x25267f0
+9651998214: cap 0: End par conjunct: 0x2526790
+9651998565: cap 0: running a local spark
+9654841575: cap 2: End par conjunct: 0x2520a30
+9654843897: cap 2: Trying to steal a spark
+9654845958: cap 2: stealing a spark from cap 0
+9725912271: cap 1: End par conjunct: 0x2520a90
+9725915304: cap 1: Trying to steal a spark
+9725918872: cap 1: stealing a spark from cap 0
+9777878748: cap 3: End par conjunct: 0x2520af0
+9777879166: cap 3: Trying to steal a spark
+9777879670: cap 3: stealing a spark from cap 0
+9824287432: cap 0: End par conjunct: 0x2526790
+9824288269: cap 0: End par conjunction: 0x2526790
+9824288706: cap 0: End par conjunct: 0x2526730
+9824289768: cap 0: running a local spark
+9830543400: cap 2: End par conjunct: 0x2520b50
+9830545330: cap 2: Trying to steal a spark
+9830547454: cap 2: stealing a spark from cap 0
+9867722602: cap 1: End par conjunct: 0x2520bb0
+9867723367: cap 1: Trying to steal a spark
+9867723768: cap 1: stealing a spark from cap 0
+9918449059: cap 3: End par conjunct: 0x2520c10
+9918450211: cap 3: Trying to steal a spark
+9918451539: cap 3: stealing a spark from cap 0
+9967959841: cap 2: End par conjunct: 0x2520c70
+9967961182: cap 2: Trying to steal a spark
+9967962555: cap 2: stealing a spark from cap 0
+9989056377: cap 0: End par conjunct: 0x2526730
+9989056579: cap 0: End par conjunction: 0x2526730
+9989056858: cap 0: End par conjunct: 0x25266d0
+9989057290: cap 0: running a local spark
+10015182895: cap 1: End par conjunct: 0x2520cd0
+10015183467: cap 1: Trying to steal a spark
+10015184277: cap 1: stealing a spark from cap 0
+10059675948: cap 3: End par conjunct: 0x2520d30
+10059676402: cap 3: Trying to steal a spark
+10059676888: cap 3: stealing a spark from cap 0
+10105111224: cap 2: End par conjunct: 0x2520d90
+10105111881: cap 2: Trying to steal a spark
+10105112583: cap 2: stealing a spark from cap 0
+10153755009: cap 0: End par conjunct: 0x25266d0
+10153755400: cap 0: End par conjunction: 0x25266d0
+10153755567: cap 0: End par conjunct: 0x2526670
+10153756350: cap 0: running a local spark
+10156564170: cap 1: End par conjunct: 0x2520df0
+10156564795: cap 1: Trying to steal a spark
+10156565889: cap 1: stealing a spark from cap 0
+10199449233: cap 3: End par conjunct: 0x2520e50
+10199449971: cap 3: Trying to steal a spark
+10199450623: cap 3: stealing a spark from cap 0
+10242140503: cap 2: End par conjunct: 0x2520eb0
+10242141174: cap 2: Trying to steal a spark
+10242141844: cap 2: stealing a spark from cap 0
+10297449207: cap 1: End par conjunct: 0x2520f10
+10297449886: cap 1: Trying to steal a spark
+10297450435: cap 1: stealing a spark from cap 0
+10317707554: cap 0: End par conjunct: 0x2526670
+10317707797: cap 0: End par conjunction: 0x2526670
+10317707968: cap 0: End par conjunct: 0x2526610
+10317708265: cap 0: running a local spark
+10340165916: cap 3: End par conjunct: 0x2520f70
+10340166298: cap 3: Trying to steal a spark
+10340166829: cap 3: stealing a spark from cap 0
+10378737562: cap 2: End par conjunct: 0x2520fd0
+10378738183: cap 2: Trying to steal a spark
+10378738926: cap 2: stealing a spark from cap 0
+10438743933: cap 1: End par conjunct: 0x2521030
+10438745697: cap 1: Trying to steal a spark
+10438747713: cap 1: stealing a spark from cap 0
+10480589802: cap 0: End par conjunct: 0x2526610
+10480590054: cap 0: End par conjunction: 0x2526610
+10480590229: cap 0: End par conjunct: 0x25265b0
+10480590585: cap 0: running a local spark
+10481222119: cap 3: End par conjunct: 0x2521090
+10481222790: cap 3: Trying to steal a spark
+10481223469: cap 3: stealing a spark from cap 0
+10563616602: cap 2: End par conjunct: 0x25210f0
+10563618640: cap 2: Trying to steal a spark
+10563620764: cap 2: stealing a spark from cap 0
+10583217459: cap 1: End par conjunct: 0x2521150
+10583219313: cap 1: Trying to steal a spark
+10583221414: cap 1: stealing a spark from cap 0
+10623586666: cap 3: End par conjunct: 0x25211b0
+10623587157: cap 3: Trying to steal a spark
+10623587679: cap 3: stealing a spark from cap 0
+10642220793: cap 0: End par conjunct: 0x25265b0
+10642221031: cap 0: End par conjunction: 0x25265b0
+10642221202: cap 0: End par conjunct: 0x2526550
+10642221454: cap 0: running a local spark
+10711376500: cap 2: End par conjunct: 0x2521210
+10711378080: cap 2: Trying to steal a spark
+10711379547: cap 2: stealing a spark from cap 0
+10727115322: cap 1: End par conjunct: 0x2521270
+10727115952: cap 1: Trying to steal a spark
+10727116326: cap 1: stealing a spark from cap 0
+10766963713: cap 3: End par conjunct: 0x25212d0
+10766964159: cap 3: Trying to steal a spark
+10766964708: cap 3: stealing a spark from cap 0
+10803763021: cap 0: End par conjunct: 0x2526550
+10803763255: cap 0: End par conjunction: 0x2526550
+10803763669: cap 0: End par conjunct: 0x25264f0
+10803764065: cap 0: running a local spark
+10850931634: cap 2: End par conjunct: 0x2521330
+10850932723: cap 2: Trying to steal a spark
+10850933682: cap 2: stealing a spark from cap 0
+10871063343: cap 1: End par conjunct: 0x2521390
+10871063959: cap 1: Trying to steal a spark
+10871064324: cap 1: stealing a spark from cap 0
+10910143683: cap 3: End par conjunct: 0x25213f0
+10910144070: cap 3: Trying to steal a spark
+10910144668: cap 3: stealing a spark from cap 0
+10964218027: cap 0: End par conjunct: 0x25264f0
+10964218221: cap 0: End par conjunction: 0x25264f0
+10964218396: cap 0: End par conjunct: 0x2526490
+10964218648: cap 0: running a local spark
+10990676259: cap 2: End par conjunct: 0x2521450
+10990677249: cap 2: Trying to steal a spark
+10990677919: cap 2: stealing a spark from cap 0
+11016644328: cap 1: End par conjunct: 0x25214b0
+11016644814: cap 1: Trying to steal a spark
+11016645349: cap 1: stealing a spark from cap 0
+11054020212: cap 3: End par conjunct: 0x2521510
+11054020747: cap 3: Trying to steal a spark
+11054021283: cap 3: stealing a spark from cap 0
+11124312552: cap 0: End par conjunct: 0x2526490
+11124312741: cap 0: End par conjunction: 0x2526490
+11124312912: cap 0: End par conjunct: 0x2526430
+11124313141: cap 0: running a local spark
+11130237697: cap 2: End par conjunct: 0x2521570
+11130238665: cap 2: Trying to steal a spark
+11130239587: cap 2: stealing a spark from cap 0
+11166443280: cap 1: End par conjunct: 0x25215d0
+11166443941: cap 1: Trying to steal a spark
+11166444351: cap 1: stealing a spark from cap 0
+11198276806: cap 3: End par conjunct: 0x2521630
+11198277180: cap 3: Trying to steal a spark
+11198277738: cap 3: stealing a spark from cap 0
+11284699194: cap 0: End par conjunct: 0x2526430
+11284699360: cap 0: End par conjunction: 0x2526430
+11284699513: cap 0: End par conjunct: 0x25263d0
+11284699761: cap 0: running a local spark
+11312440254: cap 1: End par conjunct: 0x25216f0
+11312442040: cap 1: Trying to steal a spark
+11312444371: cap 1: stealing a spark from cap 0
+11312783883: cap 2: End par conjunct: 0x2521690
+11312784580: cap 2: Trying to steal a spark
+11312784972: cap 2: stealing a spark from cap 0
+11342731563: cap 3: End par conjunct: 0x2521750
+11342732139: cap 3: Trying to steal a spark
+11342732652: cap 3: stealing a spark from cap 0
+11445803059: cap 0: End par conjunct: 0x25263d0
+11445803433: cap 0: End par conjunction: 0x25263d0
+11445803622: cap 0: End par conjunct: 0x2526370
+11445804027: cap 0: running a local spark
+11458751418: cap 1: End par conjunct: 0x25217b0
+11458753222: cap 1: Trying to steal a spark
+11458755310: cap 1: stealing a spark from cap 0
+11460625096: cap 2: End par conjunct: 0x2521810
+11460625893: cap 2: Trying to steal a spark
+11460626257: cap 2: stealing a spark from cap 0
+11487493503: cap 3: End par conjunct: 0x2521870
+11487493921: cap 3: Trying to steal a spark
+11487494565: cap 3: stealing a spark from cap 0
+11601736843: cap 2: End par conjunct: 0x2521930
+11601737851: cap 2: Trying to steal a spark
+11601738589: cap 2: stealing a spark from cap 0
+11604598339: cap 1: End par conjunct: 0x25218d0
+11604598888: cap 1: Trying to steal a spark
+11604599257: cap 1: stealing a spark from cap 0
+11606569362: cap 0: End par conjunct: 0x2526370
+11606569528: cap 0: End par conjunction: 0x2526370
+11606569825: cap 0: End par conjunct: 0x2526310
+11606570104: cap 0: running a local spark
+11633560339: cap 3: End par conjunct: 0x2521990
+11633560816: cap 3: Trying to steal a spark
+11633561136: cap 3: stealing a spark from cap 0
+11743114063: cap 2: End par conjunct: 0x25219f0
+11743115157: cap 2: Trying to steal a spark
+11743115940: cap 2: stealing a spark from cap 0
+11751459736: cap 1: End par conjunct: 0x2521a50
+11751460425: cap 1: Trying to steal a spark
+11751460942: cap 1: stealing a spark from cap 0
+11766982891: cap 0: End par conjunct: 0x2526310
+11766983035: cap 0: End par conjunction: 0x2526310
+11766983175: cap 0: End par conjunct: 0x25262b0
+11766983422: cap 0: running a local spark
+11779198884: cap 3: End par conjunct: 0x2521ab0
+11779199352: cap 3: Trying to steal a spark
+11779199617: cap 3: stealing a spark from cap 0
+11883866166: cap 2: End par conjunct: 0x2521b10
+11883867021: cap 2: Trying to steal a spark
+11883867556: cap 2: stealing a spark from cap 0
+11896785247: cap 1: End par conjunct: 0x2521b70
+11896785634: cap 1: Trying to steal a spark
+11896786044: cap 1: stealing a spark from cap 0
+11923061341: cap 3: End par conjunct: 0x2521bd0
+11923061922: cap 3: Trying to steal a spark
+11923062372: cap 3: stealing a spark from cap 0
+11926619131: cap 0: End par conjunct: 0x25262b0
+11926619298: cap 0: End par conjunction: 0x25262b0
+11926619428: cap 0: End par conjunct: 0x2526250
+11926619824: cap 0: running a local spark
+12024676044: cap 2: End par conjunct: 0x2521c30
+12024677214: cap 2: Trying to steal a spark
+12024678789: cap 2: stealing a spark from cap 0
+12041377704: cap 1: End par conjunct: 0x2521c90
+12041378595: cap 1: Trying to steal a spark
+12041378955: cap 1: stealing a spark from cap 0
+12086340925: cap 0: End par conjunct: 0x2526250
+12086341938: cap 0: End par conjunction: 0x2526250
+12086342455: cap 0: End par conjunct: 0x25261f0
+12086343774: cap 0: running a local spark
+12108682764: cap 3: End par conjunct: 0x2521cf0
+12108683965: cap 3: Trying to steal a spark
+12108685653: cap 3: stealing a spark from cap 0
+12164697918: cap 2: End par conjunct: 0x2521d50
+12164699362: cap 2: Trying to steal a spark
+12164700856: cap 2: stealing a spark from cap 0
+12184922889: cap 1: End par conjunct: 0x2521db0
+12184923429: cap 1: Trying to steal a spark
+12184923888: cap 1: stealing a spark from cap 0
+12251227675: cap 3: End par conjunct: 0x2521e10
+12251229313: cap 3: Trying to steal a spark
+12251230870: cap 3: stealing a spark from cap 0
+12251896699: cap 0: End par conjunct: 0x25261f0
+12251897073: cap 0: End par conjunction: 0x25261f0
+12251897343: cap 0: End par conjunct: 0x2526190
+12251897892: cap 0: running a local spark
+12302414905: cap 2: End par conjunct: 0x2521e70
+12302415652: cap 2: Trying to steal a spark
+12302416246: cap 2: stealing a spark from cap 0
+12333407085: cap 1: End par conjunct: 0x2521ed0
+12333407895: cap 1: Trying to steal a spark
+12333408480: cap 1: stealing a spark from cap 0
+12392754678: cap 3: End par conjunct: 0x2521f30
+12392755141: cap 3: Trying to steal a spark
+12392755785: cap 3: stealing a spark from cap 0
+12411366187: cap 0: End par conjunct: 0x2526190
+12411366376: cap 0: End par conjunction: 0x2526190
+12411366673: cap 0: End par conjunct: 0x2526130
+12411367051: cap 0: running a local spark
+12440491884: cap 2: End par conjunct: 0x2521f90
+12440493301: cap 2: Trying to steal a spark
+12440494921: cap 2: stealing a spark from cap 0
+12473435754: cap 1: End par conjunct: 0x2521ff0
+12473436339: cap 1: Trying to steal a spark
+12473436748: cap 1: stealing a spark from cap 0
+12530891619: cap 3: End par conjunct: 0x2522050
+12530892181: cap 3: Trying to steal a spark
+12530892865: cap 3: stealing a spark from cap 0
+12570819007: cap 0: End par conjunct: 0x2526130
+12570819277: cap 0: End par conjunction: 0x2526130
+12570819453: cap 0: End par conjunct: 0x25260d0
+12570819714: cap 0: running a local spark
+12573405976: cap 2: End par conjunct: 0x25220b0
+12573407128: cap 2: Trying to steal a spark
+12573407970: cap 2: stealing a spark from cap 0
+12609466533: cap 1: End par conjunct: 0x2522110
+12609468292: cap 1: Trying to steal a spark
+12609469975: cap 1: stealing a spark from cap 0
+12665593035: cap 3: End par conjunct: 0x2522170
+12665593894: cap 3: Trying to steal a spark
+12665594556: cap 3: stealing a spark from cap 0
+12730098919: cap 0: End par conjunct: 0x25260d0
+12730099153: cap 0: End par conjunction: 0x25260d0
+12730099329: cap 0: End par conjunct: 0x2526070
+12730099702: cap 0: running a local spark
+12746089467: cap 1: End par conjunct: 0x2522230
+12746091240: cap 1: Trying to steal a spark
+12746093512: cap 1: stealing a spark from cap 0
+12747438603: cap 2: End par conjunct: 0x25221d0
+12747439525: cap 2: Trying to steal a spark
+12747439917: cap 2: stealing a spark from cap 0
+12800840445: cap 3: End par conjunct: 0x2522290
+12800841079: cap 3: Trying to steal a spark
+12800841687: cap 3: stealing a spark from cap 0
+12882794319: cap 1: End par conjunct: 0x25222f0
+12882795804: cap 1: Trying to steal a spark
+12882797946: cap 1: stealing a spark from cap 0
+12885226623: cap 2: End par conjunct: 0x2522350
+12885227482: cap 2: Trying to steal a spark
+12885227986: cap 2: stealing a spark from cap 0
+12889340410: cap 0: End par conjunct: 0x2526070
+12889340604: cap 0: End par conjunction: 0x2526070
+12889340775: cap 0: End par conjunct: 0x2526010
+12889341090: cap 0: running a local spark
+12936631729: cap 3: End par conjunct: 0x25223b0
+12936632161: cap 3: Trying to steal a spark
+12936632440: cap 3: stealing a spark from cap 0
+13016933113: cap 2: End par conjunct: 0x2522470
+13016933599: cap 2: Trying to steal a spark
+13016934391: cap 2: stealing a spark from cap 0
+13019456101: cap 1: End par conjunct: 0x2522410
+13019456655: cap 1: Trying to steal a spark
+13019457055: cap 1: stealing a spark from cap 0
+13048585978: cap 0: End par conjunct: 0x2526010
+13048586176: cap 0: End par conjunction: 0x2526010
+13048586469: cap 0: End par conjunct: 0x2525fb0
+13048586914: cap 0: running a local spark
+13072866543: cap 3: End par conjunct: 0x25224d0
+13072866988: cap 3: Trying to steal a spark
+13072867348: cap 3: stealing a spark from cap 0
+13149420961: cap 2: End par conjunct: 0x2522530
+13149421587: cap 2: Trying to steal a spark
+13149422266: cap 2: stealing a spark from cap 0
+13156455595: cap 1: End par conjunct: 0x2522590
+13156456378: cap 1: Trying to steal a spark
+13156456887: cap 1: stealing a spark from cap 0
+13202327227: cap 0: End par conjunct: 0x2525fb0
+13202327430: cap 0: End par conjunction: 0x2525fb0
+13202327596: cap 0: End par conjunct: 0x2525f50
+13202328006: cap 0: running a local spark
+13209541380: cap 3: End par conjunct: 0x25225f0
+13209541816: cap 3: Trying to steal a spark
+13209542199: cap 3: stealing a spark from cap 0
+13294576719: cap 2: End par conjunct: 0x2522650
+13294578469: cap 2: Trying to steal a spark
+13294580467: cap 2: stealing a spark from cap 0
+13295452455: cap 1: End par conjunct: 0x25226b0
+13295453157: cap 1: Trying to steal a spark
+13295453553: cap 1: stealing a spark from cap 0
+13346993713: cap 3: End par conjunct: 0x2522710
+13346994289: cap 3: Trying to steal a spark
+13346994838: cap 3: stealing a spark from cap 0
+13361654686: cap 0: End par conjunct: 0x2525f50
+13361654893: cap 0: End par conjunction: 0x2525f50
+13361655055: cap 0: End par conjunct: 0x2525ef0
+13361655514: cap 0: running a local spark
+13434790189: cap 1: End par conjunct: 0x25227d0
+13434792075: cap 1: Trying to steal a spark
+13434794478: cap 1: stealing a spark from cap 0
+13465013116: cap 2: End par conjunct: 0x2522770
+13465015015: cap 2: Trying to steal a spark
+13465016919: cap 2: stealing a spark from cap 0
+13484915806: cap 3: End par conjunct: 0x2522830
+13484916477: cap 3: Trying to steal a spark
+13484917336: cap 3: stealing a spark from cap 0
+13519454503: cap 0: End par conjunct: 0x2525ef0
+13519454850: cap 0: End par conjunction: 0x2525ef0
+13519455124: cap 0: End par conjunct: 0x2525e90
+13519455376: cap 0: running a local spark
+13579299810: cap 1: End par conjunct: 0x2522890
+13579301457: cap 1: Trying to steal a spark
+13579302429: cap 1: stealing a spark from cap 0
+13599378765: cap 2: End par conjunct: 0x25228f0
+13599379377: cap 2: Trying to steal a spark
+13599379800: cap 2: stealing a spark from cap 0
+13623892609: cap 3: End par conjunct: 0x2522950
+13623893185: cap 3: Trying to steal a spark
+13623893649: cap 3: stealing a spark from cap 0
+13679082040: cap 0: End par conjunct: 0x2525e90
+13679082324: cap 0: End par conjunction: 0x2525e90
+13679082490: cap 0: End par conjunct: 0x2525e30
+13679082742: cap 0: running a local spark
+13719399462: cap 1: End par conjunct: 0x25229b0
+13719400780: cap 1: Trying to steal a spark
+13719402382: cap 1: stealing a spark from cap 0
+13734837477: cap 2: End par conjunct: 0x2522a10
+13734837954: cap 2: Trying to steal a spark
+13734838345: cap 2: stealing a spark from cap 0
+13762870983: cap 3: End par conjunct: 0x2522a70
+13762871401: cap 3: Trying to steal a spark
+13762871964: cap 3: stealing a spark from cap 0
+13839696346: cap 0: End par conjunct: 0x2525e30
+13839696603: cap 0: End par conjunction: 0x2525e30
+13839696792: cap 0: End par conjunct: 0x2525dd0
+13839697048: cap 0: running a local spark
+13859145571: cap 1: End par conjunct: 0x2522ad0
+13859146750: cap 1: Trying to steal a spark
+13859147745: cap 1: stealing a spark from cap 0
+13870250689: cap 2: End par conjunct: 0x2522b30
+13870251175: cap 2: Trying to steal a spark
+13870251544: cap 2: stealing a spark from cap 0
+13902688201: cap 3: End par conjunct: 0x2522b90
+13902688687: cap 3: Trying to steal a spark
+13902689376: cap 3: stealing a spark from cap 0
+13999707765: cap 1: End par conjunct: 0x2522bf0
+13999709479: cap 1: Trying to steal a spark
+13999711612: cap 1: stealing a spark from cap 0
+13999929925: cap 0: End par conjunct: 0x2525dd0
+13999930159: cap 0: End par conjunction: 0x2525dd0
+13999930330: cap 0: End par conjunct: 0x2525d70
+13999930789: cap 0: running a local spark
+14044262805: cap 3: End par conjunct: 0x2522cb0
+14044263592: cap 3: Trying to steal a spark
+14044264146: cap 3: stealing a spark from cap 0
+14049352827: cap 2: End par conjunct: 0x2522c50
+14049355230: cap 2: Trying to steal a spark
+14049357529: cap 2: stealing a spark from cap 0
+14142702411: cap 1: End par conjunct: 0x2522d10
+14142703923: cap 1: Trying to steal a spark
+14142705565: cap 1: stealing a spark from cap 0
+14159583769: cap 0: End par conjunct: 0x2525d70
+14159584620: cap 0: End par conjunction: 0x2525d70
+14159585119: cap 0: End par conjunct: 0x2525d10
+14159586640: cap 0: running a local spark
+14189476360: cap 2: End par conjunct: 0x2522dd0
+14189477049: cap 2: Trying to steal a spark
+14189477629: cap 2: stealing a spark from cap 0
+14204428195: cap 3: End par conjunct: 0x2522d70
+14204429865: cap 3: Trying to steal a spark
+14204431737: cap 3: stealing a spark from cap 0
+14285098071: cap 1: End par conjunct: 0x2522e30
+14285098629: cap 1: Trying to steal a spark
+14285099290: cap 1: stealing a spark from cap 0
+14319386586: cap 0: End par conjunct: 0x2525d10
+14319386770: cap 0: End par conjunction: 0x2525d10
+14319387045: cap 0: End par conjunct: 0x2525cb0
+14319387364: cap 0: running a local spark
+14326496716: cap 2: End par conjunct: 0x2522e90
+14326497346: cap 2: Trying to steal a spark
+14326498039: cap 2: stealing a spark from cap 0
+14345105616: cap 3: End par conjunct: 0x2522ef0
+14345106169: cap 3: Trying to steal a spark
+14345106669: cap 3: stealing a spark from cap 0
+14426574268: cap 1: End par conjunct: 0x2522f50
+14426574975: cap 1: Trying to steal a spark
+14426575848: cap 1: stealing a spark from cap 0
+14463282816: cap 2: End par conjunct: 0x2522fb0
+14463283608: cap 2: Trying to steal a spark
+14463284076: cap 2: stealing a spark from cap 0
+14479039764: cap 0: End par conjunct: 0x2525cb0
+14479039966: cap 0: End par conjunction: 0x2525cb0
+14479040124: cap 0: End par conjunct: 0x2525c50
+14479040632: cap 0: running a local spark
+14486433358: cap 3: End par conjunct: 0x2523010
+14486433831: cap 3: Trying to steal a spark
+14486434155: cap 3: stealing a spark from cap 0
+14568810984: cap 1: End par conjunct: 0x2523070
+14568811731: cap 1: Trying to steal a spark
+14568812536: cap 1: stealing a spark from cap 0
+14601411877: cap 2: End par conjunct: 0x25230d0
+14601412935: cap 2: Trying to steal a spark
+14601413380: cap 2: stealing a spark from cap 0
+14628823312: cap 3: End par conjunct: 0x2523130
+14628823843: cap 3: Trying to steal a spark
+14628824293: cap 3: stealing a spark from cap 0
+14638176405: cap 0: End par conjunct: 0x2525c50
+14638176558: cap 0: End par conjunction: 0x2525c50
+14638176837: cap 0: End par conjunct: 0x2525bf0
+14638177161: cap 0: running a local spark
+14712473970: cap 1: End par conjunct: 0x2523190
+14712475869: cap 1: Trying to steal a spark
+14712478024: cap 1: stealing a spark from cap 0
+14771506563: cap 3: End par conjunct: 0x2523250
+14771507184: cap 3: Trying to steal a spark
+14771507814: cap 3: stealing a spark from cap 0
+14783932206: cap 2: End par conjunct: 0x25231f0
+14783933722: cap 2: Trying to steal a spark
+14783935815: cap 2: stealing a spark from cap 0
+14796214938: cap 0: End par conjunct: 0x2525bf0
+14796215145: cap 0: End par conjunction: 0x2525bf0
+14796215320: cap 0: End par conjunct: 0x2525b90
+14796215667: cap 0: running a local spark
+14865487227: cap 1: End par conjunct: 0x25232b0
+14865489189: cap 1: Trying to steal a spark
+14865491578: cap 1: stealing a spark from cap 0
+14916953641: cap 3: End par conjunct: 0x2523310
+14916954114: cap 3: Trying to steal a spark
+14916954879: cap 3: stealing a spark from cap 0
+14933806969: cap 2: End par conjunct: 0x2523370
+14933807860: cap 2: Trying to steal a spark
+14933808607: cap 2: stealing a spark from cap 0
+14954455723: cap 0: End par conjunct: 0x2525b90
+14954455980: cap 0: End par conjunction: 0x2525b90
+14954456169: cap 0: End par conjunct: 0x2525b30
+14954456547: cap 0: running a local spark
+15012382698: cap 1: End par conjunct: 0x25233d0
+15012383508: cap 1: Trying to steal a spark
+15012384228: cap 1: stealing a spark from cap 0
+15062862001: cap 3: End par conjunct: 0x2523430
+15062862519: cap 3: Trying to steal a spark
+15062863090: cap 3: stealing a spark from cap 0
+15075263713: cap 2: End par conjunct: 0x2523490
+15075264213: cap 2: Trying to steal a spark
+15075264712: cap 2: stealing a spark from cap 0
+15111651541: cap 0: End par conjunct: 0x2525b30
+15111651730: cap 0: End par conjunction: 0x2525b30
+15111651901: cap 0: End par conjunct: 0x2525ad0
+15111652338: cap 0: running a local spark
+15159532509: cap 1: End par conjunct: 0x25234f0
+15159532869: cap 1: Trying to steal a spark
+15159533517: cap 1: stealing a spark from cap 0
+15209371957: cap 3: End par conjunct: 0x2523550
+15209372385: cap 3: Trying to steal a spark
+15209372830: cap 3: stealing a spark from cap 0
+15217142107: cap 2: End par conjunct: 0x25235b0
+15217142562: cap 2: Trying to steal a spark
+15217143066: cap 2: stealing a spark from cap 0
+15269150128: cap 0: End par conjunct: 0x2525ad0
+15269150335: cap 0: End par conjunction: 0x2525ad0
+15269150470: cap 0: End par conjunct: 0x2525a70
+15269150875: cap 0: running a local spark
+15307307370: cap 1: End par conjunct: 0x2523610
+15307308000: cap 1: Trying to steal a spark
+15307308598: cap 1: stealing a spark from cap 0
+15356259828: cap 3: End par conjunct: 0x2523670
+15356260264: cap 3: Trying to steal a spark
+15356260719: cap 3: stealing a spark from cap 0
+15359061276: cap 2: End par conjunct: 0x25236d0
+15359062068: cap 2: Trying to steal a spark
+15359062869: cap 2: stealing a spark from cap 0
+15426181422: cap 0: End par conjunct: 0x2525a70
+15426181611: cap 0: End par conjunction: 0x2525a70
+15426181777: cap 0: End par conjunct: 0x2525a10
+15426182079: cap 0: running a local spark
+15454049139: cap 1: End par conjunct: 0x2523730
+15454049773: cap 1: Trying to steal a spark
+15454050367: cap 1: stealing a spark from cap 0
+15499701720: cap 2: End par conjunct: 0x25237f0
+15499702341: cap 2: Trying to steal a spark
+15499702908: cap 2: stealing a spark from cap 0
+15501423757: cap 3: End par conjunct: 0x2523790
+15501424230: cap 3: Trying to steal a spark
+15501424765: cap 3: stealing a spark from cap 0
+15583032742: cap 0: End par conjunct: 0x2525a10
+15583032940: cap 0: End par conjunction: 0x2525a10
+15583033129: cap 0: End par conjunct: 0x25259b0
+15583033386: cap 0: running a local spark
+15599108277: cap 1: End par conjunct: 0x2523850
+15599109303: cap 1: Trying to steal a spark
+15599110086: cap 1: stealing a spark from cap 0
+15640560369: cap 2: End par conjunct: 0x25238b0
+15640561480: cap 2: Trying to steal a spark
+15640562115: cap 2: stealing a spark from cap 0
+15646349893: cap 3: End par conjunct: 0x2523910
+15646350348: cap 3: Trying to steal a spark
+15646350793: cap 3: stealing a spark from cap 0
+15739566930: cap 0: End par conjunct: 0x25259b0
+15739567137: cap 0: End par conjunction: 0x25259b0
+15739567308: cap 0: End par conjunct: 0x2525950
+15739567560: cap 0: running a local spark
+15745644837: cap 1: End par conjunct: 0x2523970
+15745645597: cap 1: Trying to steal a spark
+15745646556: cap 1: stealing a spark from cap 0
+15781384827: cap 2: End par conjunct: 0x25239d0
+15781385376: cap 2: Trying to steal a spark
+15781385727: cap 2: stealing a spark from cap 0
+15791739669: cap 3: End par conjunct: 0x2523a30
+15791740051: cap 3: Trying to steal a spark
+15791740510: cap 3: stealing a spark from cap 0
+15892384153: cap 1: End par conjunct: 0x2523a90
+15892385337: cap 1: Trying to steal a spark
+15892386390: cap 1: stealing a spark from cap 0
+15896202012: cap 0: End par conjunct: 0x2525950
+15896202246: cap 0: End par conjunction: 0x2525950
+15896202421: cap 0: End par conjunct: 0x25258f0
+15896202997: cap 0: running a local spark
+15924082396: cap 2: End par conjunct: 0x2523af0
+15924083310: cap 2: Trying to steal a spark
+15924083980: cap 2: stealing a spark from cap 0
+15937728102: cap 3: End par conjunct: 0x2523b50
+15937728588: cap 3: Trying to steal a spark
+15937729150: cap 3: stealing a spark from cap 0
+16045001689: cap 1: End par conjunct: 0x2523bb0
+16045003084: cap 1: Trying to steal a spark
+16045004160: cap 1: stealing a spark from cap 0
+16053299329: cap 0: End par conjunct: 0x25258f0
+16053299523: cap 0: End par conjunction: 0x25258f0
+16053299671: cap 0: End par conjunct: 0x2525890
+16053299982: cap 0: running a local spark
+16066608561: cap 2: End par conjunct: 0x2523c10
+16066609231: cap 2: Trying to steal a spark
+16066609744: cap 2: stealing a spark from cap 0
+16084188706: cap 3: End par conjunct: 0x2523c70
+16084189174: cap 3: Trying to steal a spark
+16084189714: cap 3: stealing a spark from cap 0
+16193615319: cap 1: End par conjunct: 0x2523cd0
+16193616453: cap 1: Trying to steal a spark
+16193617564: cap 1: stealing a spark from cap 0
+16210622965: cap 0: End par conjunct: 0x2525890
+16210623222: cap 0: End par conjunction: 0x2525890
+16210623411: cap 0: End par conjunct: 0x2525830
+16210623978: cap 0: running a local spark
+16210819453: cap 2: End par conjunct: 0x2523d30
+16210819912: cap 2: Trying to steal a spark
+16210820493: cap 2: stealing a spark from cap 0
+16232694493: cap 3: End par conjunct: 0x2523d90
+16232695141: cap 3: Trying to steal a spark
+16232695753: cap 3: stealing a spark from cap 0
+16342119135: cap 1: End par conjunct: 0x2523df0
+16342120183: cap 1: Trying to steal a spark
+16342120809: cap 1: stealing a spark from cap 0
+16354987947: cap 2: End par conjunct: 0x2523e50
+16354988622: cap 2: Trying to steal a spark
+16354988977: cap 2: stealing a spark from cap 0
+16367815017: cap 0: End par conjunct: 0x2525830
+16367815350: cap 0: End par conjunction: 0x2525830
+16367815525: cap 0: End par conjunct: 0x25257d0
+16367815836: cap 0: running a local spark
+16380890707: cap 3: End par conjunct: 0x2523eb0
+16380891310: cap 3: Trying to steal a spark
+16380891652: cap 3: stealing a spark from cap 0
+16492019895: cap 1: End par conjunct: 0x2523f10
+16492020795: cap 1: Trying to steal a spark
+16492021740: cap 1: stealing a spark from cap 0
+16499029032: cap 2: End par conjunct: 0x2523f70
+16499029392: cap 2: Trying to steal a spark
+16499029711: cap 2: stealing a spark from cap 0
+16524922896: cap 0: End par conjunct: 0x25257d0
+16524923058: cap 0: End par conjunction: 0x25257d0
+16524923215: cap 0: End par conjunct: 0x2525770
+16524923607: cap 0: running a local spark
+16529886841: cap 3: End par conjunct: 0x2523fd0
+16529887332: cap 3: Trying to steal a spark
+16529887768: cap 3: stealing a spark from cap 0
+16642523817: cap 1: End par conjunct: 0x2524030
+16642524627: cap 1: Trying to steal a spark
+16642525428: cap 1: stealing a spark from cap 0
+16643228026: cap 2: End par conjunct: 0x2524090
+16643228620: cap 2: Trying to steal a spark
+16643228958: cap 2: stealing a spark from cap 0
+16680950910: cap 0: End par conjunct: 0x2525770
+16680951099: cap 0: End par conjunction: 0x2525770
+16680951247: cap 0: End par conjunct: 0x2525710
+16680951499: cap 0: running a local spark
+16682200146: cap 3: End par conjunct: 0x25240f0
+16682200569: cap 3: Trying to steal a spark
+16682200947: cap 3: stealing a spark from cap 0
+16793102727: cap 2: End par conjunct: 0x25241b0
+16793103429: cap 2: Trying to steal a spark
+16793104441: cap 2: stealing a spark from cap 0
+16797486150: cap 1: End par conjunct: 0x2524150
+16797486825: cap 1: Trying to steal a spark
+16797487225: cap 1: stealing a spark from cap 0
+16836621975: cap 0: End par conjunct: 0x2525710
+16836622141: cap 0: End par conjunction: 0x2525710
+16836622321: cap 0: End par conjunct: 0x25256b0
+16836622663: cap 0: running a local spark
+16837625277: cap 3: End par conjunct: 0x2524210
+16837625754: cap 3: Trying to steal a spark
+16837626159: cap 3: stealing a spark from cap 0
+16945347280: cap 2: End par conjunct: 0x2524270
+16945348770: cap 2: Trying to steal a spark
+16945349895: cap 2: stealing a spark from cap 0
+16955697573: cap 1: End par conjunct: 0x25242d0
+16955698000: cap 1: Trying to steal a spark
+16955698558: cap 1: stealing a spark from cap 0
+16992188572: cap 0: End par conjunct: 0x25256b0
+16992188766: cap 0: End par conjunction: 0x25256b0
+16992188968: cap 0: End par conjunct: 0x2525650
+16992189297: cap 0: running a local spark
+16996860166: cap 3: End par conjunct: 0x2524330
+16996860612: cap 3: Trying to steal a spark
+16996860994: cap 3: stealing a spark from cap 0
+17100326358: cap 2: End par conjunct: 0x2524390
+17100327078: cap 2: Trying to steal a spark
+17100327775: cap 2: stealing a spark from cap 0
+17121939421: cap 1: End par conjunct: 0x25243f0
+17121940146: cap 1: Trying to steal a spark
+17121940542: cap 1: stealing a spark from cap 0
+17147488131: cap 0: End par conjunct: 0x2525650
+17147488477: cap 0: End par conjunction: 0x2525650
+17147488635: cap 0: End par conjunct: 0x25255f0
+17147489058: cap 0: running a local spark
+17156473344: cap 3: End par conjunct: 0x2524450
+17156473798: cap 3: Trying to steal a spark
+17156474167: cap 3: stealing a spark from cap 0
+17257222408: cap 2: End par conjunct: 0x25244b0
+17257223875: cap 2: Trying to steal a spark
+17257225095: cap 2: stealing a spark from cap 0
+17283512254: cap 1: End par conjunct: 0x2524510
+17283513100: cap 1: Trying to steal a spark
+17283513496: cap 1: stealing a spark from cap 0
+17303152891: cap 0: End par conjunct: 0x25255f0
+17303153125: cap 0: End par conjunction: 0x25255f0
+17303153301: cap 0: End par conjunct: 0x2525590
+17303153638: cap 0: running a local spark
+17317260342: cap 3: End par conjunct: 0x2524570
+17317260765: cap 3: Trying to steal a spark
+17317261179: cap 3: stealing a spark from cap 0
+17413679826: cap 2: End par conjunct: 0x25245d0
+17413680730: cap 2: Trying to steal a spark
+17413681639: cap 2: stealing a spark from cap 0
+17445166501: cap 1: End par conjunct: 0x2524630
+17445167343: cap 1: Trying to steal a spark
+17445167896: cap 1: stealing a spark from cap 0
+17459300466: cap 0: End par conjunct: 0x2525590
+17459301208: cap 0: End par conjunction: 0x2525590
+17459301870: cap 0: End par conjunct: 0x2525530
+17459303044: cap 0: running a local spark
+17482807381: cap 3: End par conjunct: 0x2524690
+17482808547: cap 3: Trying to steal a spark
+17482809829: cap 3: stealing a spark from cap 0
+17569003230: cap 2: End par conjunct: 0x25246f0
+17569004233: cap 2: Trying to steal a spark
+17569004854: cap 2: stealing a spark from cap 0
+17605677370: cap 1: End par conjunct: 0x2524750
+17605677892: cap 1: Trying to steal a spark
+17605678446: cap 1: stealing a spark from cap 0
+17615119162: cap 0: End par conjunct: 0x2525530
+17615120013: cap 0: End par conjunction: 0x2525530
+17615120620: cap 0: End par conjunct: 0x25254d0
+17615121957: cap 0: running a local spark
+17686208227: cap 3: End par conjunct: 0x25247b0
+17686209937: cap 3: Trying to steal a spark
+17686211638: cap 3: stealing a spark from cap 0
+17725139019: cap 2: End par conjunct: 0x2524810
+17725140454: cap 2: Trying to steal a spark
+17725141692: cap 2: stealing a spark from cap 0
+17767218150: cap 1: End par conjunct: 0x2524870
+17767218951: cap 1: Trying to steal a spark
+17767219387: cap 1: stealing a spark from cap 0
+17770340709: cap 0: End par conjunct: 0x25254d0
+17770340929: cap 0: End par conjunction: 0x25254d0
+17770341208: cap 0: End par conjunct: 0x2525470
+17770341649: cap 0: running a local spark
+17846979615: cap 3: End par conjunct: 0x25248d0
+17846980263: cap 3: Trying to steal a spark
+17846980960: cap 3: stealing a spark from cap 0
+17882204926: cap 2: End par conjunct: 0x2524930
+17882206677: cap 2: Trying to steal a spark
+17882208459: cap 2: stealing a spark from cap 0
+17925635443: cap 0: End par conjunct: 0x2525470
+17925635695: cap 0: End par conjunction: 0x2525470
+17925635983: cap 0: End par conjunct: 0x2525410
+17925636316: cap 0: running a local spark
+17929204371: cap 1: End par conjunct: 0x2524990
+17929205428: cap 1: Trying to steal a spark
+17929206256: cap 1: stealing a spark from cap 0
+18007752343: cap 3: End par conjunct: 0x25249f0
+18007752766: cap 3: Trying to steal a spark
+18007753437: cap 3: stealing a spark from cap 0
+18038756245: cap 2: End par conjunct: 0x2524a50
+18038757163: cap 2: Trying to steal a spark
+18038757798: cap 2: stealing a spark from cap 0
+18080380548: cap 0: End par conjunct: 0x2525410
+18080380750: cap 0: End par conjunction: 0x2525410
+18080380926: cap 0: End par conjunct: 0x25253b0
+18080381268: cap 0: running a local spark
+18090447849: cap 1: End par conjunct: 0x2524ab0
+18090448285: cap 1: Trying to steal a spark
+18090448825: cap 1: stealing a spark from cap 0
+18168395116: cap 3: End par conjunct: 0x2524b10
+18168395557: cap 3: Trying to steal a spark
+18168396106: cap 3: stealing a spark from cap 0
+18194295892: cap 2: End par conjunct: 0x2524b70
+18194296734: cap 2: Trying to steal a spark
+18194297454: cap 2: stealing a spark from cap 0
+18235582875: cap 0: End par conjunct: 0x25253b0
+18235583064: cap 0: End par conjunction: 0x25253b0
+18235583217: cap 0: End par conjunct: 0x2525350
+18235583536: cap 0: running a local spark
+18251847418: cap 1: End par conjunct: 0x2524bd0
+18251847949: cap 1: Trying to steal a spark
+18251848642: cap 1: stealing a spark from cap 0
+18328247212: cap 3: End par conjunct: 0x2524c30
+18328247581: cap 3: Trying to steal a spark
+18328248135: cap 3: stealing a spark from cap 0
+18349427848: cap 2: End par conjunct: 0x2524c90
+18349428879: cap 2: Trying to steal a spark
+18349429522: cap 2: stealing a spark from cap 0
+18390413767: cap 0: End par conjunct: 0x2525350
+18390414015: cap 0: End par conjunction: 0x2525350
+18390414307: cap 0: End par conjunct: 0x25252f0
+18390414771: cap 0: running a local spark
+18418554441: cap 1: End par conjunct: 0x2524cf0
+18418556151: cap 1: Trying to steal a spark
+18418558081: cap 1: stealing a spark from cap 0
+18488594830: cap 3: End par conjunct: 0x2524d50
+18488595802: cap 3: Trying to steal a spark
+18488596576: cap 3: stealing a spark from cap 0
+18545712619: cap 0: End par conjunct: 0x25252f0
+18545712975: cap 0: End par conjunction: 0x25252f0
+18545713146: cap 0: End par conjunct: 0x2525290
+18545713398: cap 0: running a local spark
+18548312062: cap 2: End par conjunct: 0x2524db0
+18548314159: cap 2: Trying to steal a spark
+18548316522: cap 2: stealing a spark from cap 0
+18581090584: cap 1: End par conjunct: 0x2524e10
+18581091916: cap 1: Trying to steal a spark
+18581092528: cap 1: stealing a spark from cap 0
+18647874999: cap 3: End par conjunct: 0x2524e70
+18647876155: cap 3: Trying to steal a spark
+18647877249: cap 3: stealing a spark from cap 0
+18701289085: cap 0: End par conjunct: 0x2525290
+18701289450: cap 0: End par conjunction: 0x2525290
+18701289634: cap 0: End par conjunct: 0x2525230
+18701290008: cap 0: running a local spark
+18709436227: cap 2: End par conjunct: 0x2524ed0
+18709437973: cap 2: Trying to steal a spark
+18709439710: cap 2: stealing a spark from cap 0
+18740173275: cap 1: End par conjunct: 0x2524f30
+18740174184: cap 1: Trying to steal a spark
+18740174580: cap 1: stealing a spark from cap 0
+18805391203: cap 3: End par conjunct: 0x2524f90
+18805391730: cap 3: Trying to steal a spark
+18805392283: cap 3: stealing a spark from cap 0
+18855587983: cap 0: End par conjunct: 0x2525230
+18855588177: cap 0: End par conjunction: 0x2525230
+18855588330: cap 0: End par conjunct: 0x25251d0
+18855588541: cap 0: running a local spark
+18861182568: cap 2: End par conjunct: 0x2524ff0
+18861183427: cap 2: Trying to steal a spark
+18861184143: cap 2: stealing a spark from cap 0
+18895434813: cap 1: End par conjunct: 0x2525050
+18895435393: cap 1: Trying to steal a spark
+18895435798: cap 1: stealing a spark from cap 0
+18959237212: cap 3: End par conjunct: 0x25250b0
+18959238031: cap 3: Trying to steal a spark
+18959238990: cap 3: Looking for global thread to resume
+19010127069: cap 0: End par conjunct: 0x25251d0
+19010127645: cap 0: End par conjunction: 0x25251d0
+19010128009: cap 0: End par conjunct: 0x2525170
+19010128540: cap 0: Trying to steal a spark
+19010134809: cap 0: stopping thread 1 (thread blocked)
+19010135358: cap 0: Looking for global thread to resume
+19010337894: cap 2: End par conjunct: 0x2525110
+19010338645: cap 2: Trying to steal a spark
+19010339802: cap 2: Looking for global thread to resume
+19050343357: cap 1: End par conjunct: 0x2525170
+19050344109: cap 1: stopping thread 4 (thread finished)
+19050349639: cap 1: thread 1 is runnable
+19050352011: cap 1: Releasing thread 4 to the free pool
+19050353118: cap 1: running thread 1
+19050353397: cap 1: End par conjunction: 0x2525170
+19050353689: cap 1: End par conjunct: 0x2525110
+19050353869: cap 1: End par conjunction: 0x2525110
+19050354108: cap 1: End par conjunct: 0x25250b0
+19050354238: cap 1: End par conjunction: 0x25250b0
+19050354409: cap 1: End par conjunct: 0x2525050
+19050354535: cap 1: End par conjunction: 0x2525050
+19050354666: cap 1: End par conjunct: 0x2524ff0
+19050354801: cap 1: End par conjunction: 0x2524ff0
+19050355021: cap 1: End par conjunct: 0x2524f90
+19050355345: cap 1: End par conjunction: 0x2524f90
+19050355494: cap 1: End par conjunct: 0x2524f30
+19050355620: cap 1: End par conjunction: 0x2524f30
+19050369354: cap 1: End par conjunct: 0x2524ed0
+19050369520: cap 1: End par conjunction: 0x2524ed0
+19050369709: cap 1: End par conjunct: 0x2524e70
+19050369849: cap 1: End par conjunction: 0x2524e70
+19050370087: cap 1: End par conjunct: 0x2524e10
+19050370299: cap 1: End par conjunction: 0x2524e10
+19050370429: cap 1: End par conjunct: 0x2524db0
+19050370564: cap 1: End par conjunction: 0x2524db0
+19050370699: cap 1: End par conjunct: 0x2524d50
+19050370825: cap 1: End par conjunction: 0x2524d50
+19050370960: cap 1: End par conjunct: 0x2524cf0
+19050371086: cap 1: End par conjunction: 0x2524cf0
+19050371221: cap 1: End par conjunct: 0x2524c90
+19050371352: cap 1: End par conjunction: 0x2524c90
+19050371482: cap 1: End par conjunct: 0x2524c30
+19050371613: cap 1: End par conjunction: 0x2524c30
+19050371739: cap 1: End par conjunct: 0x2524bd0
+19050371874: cap 1: End par conjunction: 0x2524bd0
+19050372004: cap 1: End par conjunct: 0x2524b70
+19050372130: cap 1: End par conjunction: 0x2524b70
+19050372306: cap 1: End par conjunct: 0x2524b10
+19050372445: cap 1: End par conjunction: 0x2524b10
+19050372576: cap 1: End par conjunct: 0x2524ab0
+19050372702: cap 1: End par conjunction: 0x2524ab0
+19050372828: cap 1: End par conjunct: 0x2524a50
+19050372958: cap 1: End par conjunction: 0x2524a50
+19050373147: cap 1: End par conjunct: 0x25249f0
+19050373273: cap 1: End par conjunction: 0x25249f0
+19050373458: cap 1: End par conjunct: 0x2524990
+19050373584: cap 1: End par conjunction: 0x2524990
+19050373714: cap 1: End par conjunct: 0x2524930
+19050373849: cap 1: End par conjunction: 0x2524930
+19050373975: cap 1: End par conjunct: 0x25248d0
+19050374101: cap 1: End par conjunction: 0x25248d0
+19050374232: cap 1: End par conjunct: 0x2524870
+19050374367: cap 1: End par conjunction: 0x2524870
+19050374497: cap 1: End par conjunct: 0x2524810
+19050374623: cap 1: End par conjunction: 0x2524810
+19050374749: cap 1: End par conjunct: 0x25247b0
+19050374997: cap 1: End par conjunction: 0x25247b0
+19050375127: cap 1: End par conjunct: 0x2524750
+19050375258: cap 1: End par conjunction: 0x2524750
+19050375505: cap 1: End par conjunct: 0x25246f0
+19050375627: cap 1: End par conjunction: 0x25246f0
+19050375762: cap 1: End par conjunct: 0x2524690
+19050375892: cap 1: End par conjunction: 0x2524690
+19050376023: cap 1: End par conjunct: 0x2524630
+19050376153: cap 1: End par conjunction: 0x2524630
+19050376279: cap 1: End par conjunct: 0x25245d0
+19050376414: cap 1: End par conjunction: 0x25245d0
+19050376540: cap 1: End par conjunct: 0x2524570
+19050376671: cap 1: End par conjunction: 0x2524570
+19050376797: cap 1: End par conjunct: 0x2524510
+19050376932: cap 1: End par conjunction: 0x2524510
+19050377062: cap 1: End par conjunct: 0x25244b0
+19050377188: cap 1: End par conjunction: 0x25244b0
+19050377314: cap 1: End par conjunct: 0x2524450
+19050377440: cap 1: End par conjunction: 0x2524450
+19050377571: cap 1: End par conjunct: 0x25243f0
+19050377697: cap 1: End par conjunction: 0x25243f0
+19050377827: cap 1: End par conjunct: 0x2524390
+19050377949: cap 1: End par conjunction: 0x2524390
+19050378079: cap 1: End par conjunct: 0x2524330
+19050378210: cap 1: End par conjunction: 0x2524330
+19050378340: cap 1: End par conjunct: 0x25242d0
+19050378466: cap 1: End par conjunction: 0x25242d0
+19050378597: cap 1: End par conjunct: 0x2524270
+19050378727: cap 1: End par conjunction: 0x2524270
+19050378858: cap 1: End par conjunct: 0x2524210
+19050378984: cap 1: End par conjunction: 0x2524210
+19050379110: cap 1: End par conjunct: 0x25241b0
+19050379245: cap 1: End par conjunction: 0x25241b0
+19050379375: cap 1: End par conjunct: 0x2524150
+19050379506: cap 1: End par conjunction: 0x2524150
+19050379636: cap 1: End par conjunct: 0x25240f0
+19050379762: cap 1: End par conjunction: 0x25240f0
+19050379897: cap 1: End par conjunct: 0x2524090
+19050380023: cap 1: End par conjunction: 0x2524090
+19050380158: cap 1: End par conjunct: 0x2524030
+19050380280: cap 1: End par conjunction: 0x2524030
+19050380406: cap 1: End par conjunct: 0x2523fd0
+19050380712: cap 1: End par conjunction: 0x2523fd0
+19050380959: cap 1: End par conjunct: 0x2523f70
+19050381207: cap 1: End par conjunction: 0x2523f70
+19050381333: cap 1: End par conjunct: 0x2523f10
+19050381472: cap 1: End par conjunction: 0x2523f10
+19050381603: cap 1: End par conjunct: 0x2523eb0
+19050381724: cap 1: End par conjunction: 0x2523eb0
+19050381855: cap 1: End par conjunct: 0x2523e50
+19050381981: cap 1: End par conjunction: 0x2523e50
+19050382111: cap 1: End par conjunct: 0x2523df0
+19050382237: cap 1: End par conjunction: 0x2523df0
+19050382368: cap 1: End par conjunct: 0x2523d90
+19050382494: cap 1: End par conjunction: 0x2523d90
+19050382629: cap 1: End par conjunct: 0x2523d30
+19050382755: cap 1: End par conjunction: 0x2523d30
+19050382885: cap 1: End par conjunct: 0x2523cd0
+19050383007: cap 1: End par conjunction: 0x2523cd0
+19050383142: cap 1: End par conjunct: 0x2523c70
+19050383277: cap 1: End par conjunction: 0x2523c70
+19050383407: cap 1: End par conjunct: 0x2523c10
+19050383533: cap 1: End par conjunction: 0x2523c10
+19050383668: cap 1: End par conjunct: 0x2523bb0
+19050383799: cap 1: End par conjunction: 0x2523bb0
+19050383929: cap 1: End par conjunct: 0x2523b50
+19050384055: cap 1: End par conjunction: 0x2523b50
+19050384195: cap 1: End par conjunct: 0x2523af0
+19050384321: cap 1: End par conjunction: 0x2523af0
+19050384451: cap 1: End par conjunct: 0x2523a90
+19050384577: cap 1: End par conjunction: 0x2523a90
+19050384726: cap 1: End par conjunct: 0x2523a30
+19050384852: cap 1: End par conjunction: 0x2523a30
+19050384978: cap 1: End par conjunct: 0x25239d0
+19050385113: cap 1: End par conjunction: 0x25239d0
+19050385243: cap 1: End par conjunct: 0x2523970
+19050385374: cap 1: End par conjunction: 0x2523970
+19050385495: cap 1: End par conjunct: 0x2523910
+19050385630: cap 1: End par conjunction: 0x2523910
+19050385761: cap 1: End par conjunct: 0x25238b0
+19050385887: cap 1: End par conjunction: 0x25238b0
+19050386013: cap 1: End par conjunct: 0x2523850
+19050386143: cap 1: End par conjunction: 0x2523850
+19050386274: cap 1: End par conjunct: 0x25237f0
+19050386400: cap 1: End par conjunction: 0x25237f0
+19050386535: cap 1: End par conjunct: 0x2523790
+19050386661: cap 1: End par conjunction: 0x2523790
+19050386787: cap 1: End par conjunct: 0x2523730
+19050386917: cap 1: End par conjunction: 0x2523730
+19050387043: cap 1: End par conjunct: 0x25236d0
+19050387169: cap 1: End par conjunction: 0x25236d0
+19050387295: cap 1: End par conjunct: 0x2523670
+19050387430: cap 1: End par conjunction: 0x2523670
+19050387561: cap 1: End par conjunct: 0x2523610
+19050387687: cap 1: End par conjunction: 0x2523610
+19050387817: cap 1: End par conjunct: 0x25235b0
+19050387948: cap 1: End par conjunction: 0x25235b0
+19050388078: cap 1: End par conjunct: 0x2523550
+19050388209: cap 1: End par conjunction: 0x2523550
+19050388344: cap 1: End par conjunct: 0x25234f0
+19050388465: cap 1: End par conjunction: 0x25234f0
+19050388596: cap 1: End par conjunct: 0x2523490
+19050388726: cap 1: End par conjunction: 0x2523490
+19050388857: cap 1: End par conjunct: 0x2523430
+19050388987: cap 1: End par conjunction: 0x2523430
+19050389113: cap 1: End par conjunct: 0x25233d0
+19050389248: cap 1: End par conjunction: 0x25233d0
+19050389374: cap 1: End par conjunct: 0x2523370
+19050389505: cap 1: End par conjunction: 0x2523370
+19050389631: cap 1: End par conjunct: 0x2523310
+19050389766: cap 1: End par conjunction: 0x2523310
+19050389901: cap 1: End par conjunct: 0x25232b0
+19050390027: cap 1: End par conjunction: 0x25232b0
+19050390153: cap 1: End par conjunct: 0x2523250
+19050390283: cap 1: End par conjunction: 0x2523250
+19050390414: cap 1: End par conjunct: 0x25231f0
+19050390540: cap 1: End par conjunction: 0x25231f0
+19050390670: cap 1: End par conjunct: 0x2523190
+19050390796: cap 1: End par conjunction: 0x2523190
+19050390927: cap 1: End par conjunct: 0x2523130
+19050391053: cap 1: End par conjunction: 0x2523130
+19050391183: cap 1: End par conjunct: 0x25230d0
+19050391305: cap 1: End par conjunction: 0x25230d0
+19050391476: cap 1: End par conjunct: 0x2523070
+19050391611: cap 1: End par conjunction: 0x2523070
+19050391741: cap 1: End par conjunct: 0x2523010
+19050391858: cap 1: End par conjunction: 0x2523010
+19050392101: cap 1: End par conjunct: 0x2522fb0
+19050392407: cap 1: End par conjunction: 0x2522fb0
+19050392538: cap 1: End par conjunct: 0x2522f50
+19050392749: cap 1: End par conjunction: 0x2522f50
+19050392884: cap 1: End par conjunct: 0x2522ef0
+19050393010: cap 1: End par conjunction: 0x2522ef0
+19050393141: cap 1: End par conjunct: 0x2522e90
+19050393271: cap 1: End par conjunction: 0x2522e90
+19050393402: cap 1: End par conjunct: 0x2522e30
+19050393528: cap 1: End par conjunction: 0x2522e30
+19050393658: cap 1: End par conjunct: 0x2522dd0
+19050393793: cap 1: End par conjunction: 0x2522dd0
+19050393919: cap 1: End par conjunct: 0x2522d70
+19050394045: cap 1: End par conjunction: 0x2522d70
+19050394176: cap 1: End par conjunct: 0x2522d10
+19050394311: cap 1: End par conjunction: 0x2522d10
+19050394446: cap 1: End par conjunct: 0x2522cb0
+19050394567: cap 1: End par conjunction: 0x2522cb0
+19050394698: cap 1: End par conjunct: 0x2522c50
+19050394824: cap 1: End par conjunction: 0x2522c50
+19050394954: cap 1: End par conjunct: 0x2522bf0
+19050395080: cap 1: End par conjunction: 0x2522bf0
+19050395211: cap 1: End par conjunct: 0x2522b90
+19050395332: cap 1: End par conjunction: 0x2522b90
+19050395467: cap 1: End par conjunct: 0x2522b30
+19050395598: cap 1: End par conjunction: 0x2522b30
+19050395724: cap 1: End par conjunct: 0x2522ad0
+19050395850: cap 1: End par conjunction: 0x2522ad0
+19050395985: cap 1: End par conjunct: 0x2522a70
+19050396120: cap 1: End par conjunction: 0x2522a70
+19050396246: cap 1: End par conjunct: 0x2522a10
+19050396372: cap 1: End par conjunction: 0x2522a10
+19050396507: cap 1: End par conjunct: 0x25229b0
+19050396642: cap 1: End par conjunction: 0x25229b0
+19050396772: cap 1: End par conjunct: 0x2522950
+19050396898: cap 1: End par conjunction: 0x2522950
+19050397042: cap 1: End par conjunct: 0x25228f0
+19050397168: cap 1: End par conjunction: 0x25228f0
+19050397299: cap 1: End par conjunct: 0x2522890
+19050397429: cap 1: End par conjunction: 0x2522890
+19050397573: cap 1: End par conjunct: 0x2522830
+19050397704: cap 1: End par conjunction: 0x2522830
+19050397830: cap 1: End par conjunct: 0x25227d0
+19050397965: cap 1: End par conjunction: 0x25227d0
+19050398095: cap 1: End par conjunct: 0x2522770
+19050398221: cap 1: End par conjunction: 0x2522770
+19050398347: cap 1: End par conjunct: 0x2522710
+19050398482: cap 1: End par conjunction: 0x2522710
+19050398617: cap 1: End par conjunct: 0x25226b0
+19050398743: cap 1: End par conjunction: 0x25226b0
+19050398869: cap 1: End par conjunct: 0x2522650
+19050399000: cap 1: End par conjunction: 0x2522650
+19050399130: cap 1: End par conjunct: 0x25225f0
+19050399256: cap 1: End par conjunction: 0x25225f0
+19050399387: cap 1: End par conjunct: 0x2522590
+19050399513: cap 1: End par conjunction: 0x2522590
+19050399648: cap 1: End par conjunct: 0x2522530
+19050399774: cap 1: End par conjunction: 0x2522530
+19050399904: cap 1: End par conjunct: 0x25224d0
+19050400026: cap 1: End par conjunction: 0x25224d0
+19050400161: cap 1: End par conjunct: 0x2522470
+19050400296: cap 1: End par conjunction: 0x2522470
+19050400422: cap 1: End par conjunct: 0x2522410
+19050400548: cap 1: End par conjunction: 0x2522410
+19050400683: cap 1: End par conjunct: 0x25223b0
+19050400813: cap 1: End par conjunction: 0x25223b0
+19050400944: cap 1: End par conjunct: 0x2522350
+19050401070: cap 1: End par conjunction: 0x2522350
+19050401205: cap 1: End par conjunct: 0x25222f0
+19050401331: cap 1: End par conjunction: 0x25222f0
+19050401461: cap 1: End par conjunct: 0x2522290
+19050401592: cap 1: End par conjunction: 0x2522290
+19050401740: cap 1: End par conjunct: 0x2522230
+19050401866: cap 1: End par conjunction: 0x2522230
+19050401992: cap 1: End par conjunct: 0x25221d0
+19050402127: cap 1: End par conjunction: 0x25221d0
+19050402258: cap 1: End par conjunct: 0x2522170
+19050402384: cap 1: End par conjunction: 0x2522170
+19050402510: cap 1: End par conjunct: 0x2522110
+19050402649: cap 1: End par conjunction: 0x2522110
+19050402780: cap 1: End par conjunct: 0x25220b0
+19050403014: cap 1: End par conjunction: 0x25220b0
+19050403140: cap 1: End par conjunct: 0x2522050
+19050403261: cap 1: End par conjunction: 0x2522050
+19050403396: cap 1: End par conjunct: 0x2521ff0
+19050403639: cap 1: End par conjunction: 0x2521ff0
+19050403770: cap 1: End par conjunct: 0x2521f90
+19050403896: cap 1: End par conjunction: 0x2521f90
+19050404035: cap 1: End par conjunct: 0x2521f30
+19050404170: cap 1: End par conjunction: 0x2521f30
+19050404301: cap 1: End par conjunct: 0x2521ed0
+19050404427: cap 1: End par conjunction: 0x2521ed0
+19050404553: cap 1: End par conjunct: 0x2521e70
+19050404683: cap 1: End par conjunction: 0x2521e70
+19050404814: cap 1: End par conjunct: 0x2521e10
+19050404940: cap 1: End par conjunction: 0x2521e10
+19050405075: cap 1: End par conjunct: 0x2521db0
+19050405205: cap 1: End par conjunction: 0x2521db0
+19050405336: cap 1: End par conjunct: 0x2521d50
+19050405466: cap 1: End par conjunction: 0x2521d50
+19050405709: cap 1: End par conjunct: 0x2521cf0
+19050405835: cap 1: End par conjunction: 0x2521cf0
+19050405966: cap 1: End par conjunct: 0x2521c90
+19050406096: cap 1: End par conjunction: 0x2521c90
+19050406344: cap 1: End par conjunct: 0x2521c30
+19050406470: cap 1: End par conjunction: 0x2521c30
+19050406596: cap 1: End par conjunct: 0x2521bd0
+19050406731: cap 1: End par conjunction: 0x2521bd0
+19050406861: cap 1: End par conjunct: 0x2521b70
+19050406987: cap 1: End par conjunction: 0x2521b70
+19050407113: cap 1: End par conjunct: 0x2521b10
+19050407248: cap 1: End par conjunction: 0x2521b10
+19050407383: cap 1: End par conjunct: 0x2521ab0
+19050407509: cap 1: End par conjunction: 0x2521ab0
+19050407635: cap 1: End par conjunct: 0x2521a50
+19050407761: cap 1: End par conjunction: 0x2521a50
+19050407892: cap 1: End par conjunct: 0x25219f0
+19050408018: cap 1: End par conjunction: 0x25219f0
+19050408148: cap 1: End par conjunct: 0x2521990
+19050408274: cap 1: End par conjunction: 0x2521990
+19050408405: cap 1: End par conjunct: 0x2521930
+19050408535: cap 1: End par conjunction: 0x2521930
+19050408661: cap 1: End par conjunct: 0x25218d0
+19050408792: cap 1: End par conjunction: 0x25218d0
+19050408918: cap 1: End par conjunct: 0x2521870
+19050409053: cap 1: End par conjunction: 0x2521870
+19050409179: cap 1: End par conjunct: 0x2521810
+19050409305: cap 1: End par conjunction: 0x2521810
+19050409440: cap 1: End par conjunct: 0x25217b0
+19050409575: cap 1: End par conjunction: 0x25217b0
+19050409701: cap 1: End par conjunct: 0x2521750
+19050409831: cap 1: End par conjunction: 0x2521750
+19050409962: cap 1: End par conjunct: 0x25216f0
+19050410088: cap 1: End par conjunction: 0x25216f0
+19050410218: cap 1: End par conjunct: 0x2521690
+19050410349: cap 1: End par conjunction: 0x2521690
+19050410488: cap 1: End par conjunct: 0x2521630
+19050410614: cap 1: End par conjunction: 0x2521630
+19050410740: cap 1: End par conjunct: 0x25215d0
+19050410880: cap 1: End par conjunction: 0x25215d0
+19050411051: cap 1: End par conjunct: 0x2521570
+19050411177: cap 1: End par conjunction: 0x2521570
+19050411348: cap 1: End par conjunct: 0x2521510
+19050411483: cap 1: End par conjunction: 0x2521510
+19050411658: cap 1: End par conjunct: 0x25214b0
+19050411784: cap 1: End par conjunction: 0x25214b0
+19050411915: cap 1: End par conjunct: 0x2521450
+19050412045: cap 1: End par conjunction: 0x2521450
+19050412176: cap 1: End par conjunct: 0x25213f0
+19050412302: cap 1: End par conjunction: 0x25213f0
+19050412437: cap 1: End par conjunct: 0x2521390
+19050412563: cap 1: End par conjunction: 0x2521390
+19050412698: cap 1: End par conjunct: 0x2521330
+19050412828: cap 1: End par conjunction: 0x2521330
+19050412959: cap 1: End par conjunct: 0x25212d0
+19050413085: cap 1: End par conjunction: 0x25212d0
+19050413220: cap 1: End par conjunct: 0x2521270
+19050413355: cap 1: End par conjunction: 0x2521270
+19050413481: cap 1: End par conjunct: 0x2521210
+19050413607: cap 1: End par conjunction: 0x2521210
+19050413742: cap 1: End par conjunct: 0x25211b0
+19050413872: cap 1: End par conjunction: 0x25211b0
+19050414003: cap 1: End par conjunct: 0x2521150
+19050414133: cap 1: End par conjunction: 0x2521150
+19050414264: cap 1: End par conjunct: 0x25210f0
+19050414390: cap 1: End par conjunction: 0x25210f0
+19050414520: cap 1: End par conjunct: 0x2521090
+19050414646: cap 1: End par conjunction: 0x2521090
+19050414790: cap 1: End par conjunct: 0x2521030
+19050414912: cap 1: End par conjunction: 0x2521030
+19050415038: cap 1: End par conjunct: 0x2520fd0
+19050415303: cap 1: End par conjunction: 0x2520fd0
+19050415542: cap 1: End par conjunct: 0x2520f70
+19050415785: cap 1: End par conjunction: 0x2520f70
+19050415906: cap 1: End par conjunct: 0x2520f10
+19050416041: cap 1: End par conjunction: 0x2520f10
+19050416176: cap 1: End par conjunct: 0x2520eb0
+19050416302: cap 1: End par conjunction: 0x2520eb0
+19050416428: cap 1: End par conjunct: 0x2520e50
+19050416554: cap 1: End par conjunction: 0x2520e50
+19050416689: cap 1: End par conjunct: 0x2520df0
+19050416811: cap 1: End par conjunction: 0x2520df0
+19050416941: cap 1: End par conjunct: 0x2520d90
+19050417072: cap 1: End par conjunction: 0x2520d90
+19050417202: cap 1: End par conjunct: 0x2520d30
+19050417333: cap 1: End par conjunction: 0x2520d30
+19050417463: cap 1: End par conjunct: 0x2520cd0
+19050417598: cap 1: End par conjunction: 0x2520cd0
+19050417724: cap 1: End par conjunct: 0x2520c70
+19050417864: cap 1: End par conjunction: 0x2520c70
+19050417990: cap 1: End par conjunct: 0x2520c10
+19050418116: cap 1: End par conjunction: 0x2520c10
+19050418246: cap 1: End par conjunct: 0x2520bb0
+19050418377: cap 1: End par conjunction: 0x2520bb0
+19050418512: cap 1: End par conjunct: 0x2520b50
+19050418638: cap 1: End par conjunction: 0x2520b50
+19050418773: cap 1: End par conjunct: 0x2520af0
+19050418894: cap 1: End par conjunction: 0x2520af0
+19050419029: cap 1: End par conjunct: 0x2520a90
+19050419160: cap 1: End par conjunction: 0x2520a90
+19050419295: cap 1: End par conjunct: 0x2520a30
+19050419421: cap 1: End par conjunction: 0x2520a30
+19050419547: cap 1: End par conjunct: 0x25209d0
+19050419686: cap 1: End par conjunction: 0x25209d0
+19050419812: cap 1: End par conjunct: 0x2520970
+19050419938: cap 1: End par conjunction: 0x2520970
+19050420064: cap 1: End par conjunct: 0x2520910
+19050420199: cap 1: End par conjunction: 0x2520910
+19050420334: cap 1: End par conjunct: 0x25208b0
+19050420460: cap 1: End par conjunction: 0x25208b0
+19050420586: cap 1: End par conjunct: 0x2520850
+19050420717: cap 1: End par conjunction: 0x2520850
+19050420847: cap 1: End par conjunct: 0x25207f0
+19050420973: cap 1: End par conjunction: 0x25207f0
+19050421104: cap 1: End par conjunct: 0x2520790
+19050421230: cap 1: End par conjunction: 0x2520790
+19050421360: cap 1: End par conjunct: 0x2520730
+19050421491: cap 1: End par conjunction: 0x2520730
+19050421621: cap 1: End par conjunct: 0x25206d0
+19050421747: cap 1: End par conjunction: 0x25206d0
+19050421873: cap 1: End par conjunct: 0x2520670
+19050422004: cap 1: End par conjunction: 0x2520670
+19050422134: cap 1: End par conjunct: 0x2520610
+19050422260: cap 1: End par conjunction: 0x2520610
+19050422395: cap 1: End par conjunct: 0x25205b0
+19050422530: cap 1: End par conjunction: 0x25205b0
+19050422661: cap 1: End par conjunct: 0x2520550
+19050422787: cap 1: End par conjunction: 0x2520550
+19050422922: cap 1: End par conjunct: 0x25204f0
+19050423048: cap 1: End par conjunction: 0x25204f0
+19050423178: cap 1: End par conjunct: 0x2520490
+19050423309: cap 1: End par conjunction: 0x2520490
+19050423444: cap 1: End par conjunct: 0x2520430
+19050423574: cap 1: End par conjunction: 0x2520430
+19050423696: cap 1: End par conjunct: 0x25203d0
+19050423831: cap 1: End par conjunction: 0x25203d0
+19050423961: cap 1: End par conjunct: 0x2520370
+19050424087: cap 1: End par conjunction: 0x2520370
+19050424213: cap 1: End par conjunct: 0x2520310
+19050424348: cap 1: End par conjunction: 0x2520310
+19050424519: cap 1: End par conjunct: 0x25202b0
+19050424645: cap 1: End par conjunction: 0x25202b0
+19050424771: cap 1: End par conjunct: 0x2520250
+19050424897: cap 1: End par conjunction: 0x2520250
+19050425028: cap 1: End par conjunct: 0x25201f0
+19050425154: cap 1: End par conjunction: 0x25201f0
+19050425284: cap 1: End par conjunct: 0x2520190
+19050425410: cap 1: End par conjunction: 0x2520190
+19050425545: cap 1: End par conjunct: 0x2520130
+19050425676: cap 1: End par conjunction: 0x2520130
+19050425802: cap 1: End par conjunct: 0x25200d0
+19050425928: cap 1: End par conjunction: 0x25200d0
+19050426090: cap 1: End par conjunct: 0x2520070
+19050426225: cap 1: End par conjunction: 0x2520070
+19050426355: cap 1: End par conjunct: 0x2520010
+19050426472: cap 1: End par conjunction: 0x2520010
+19050426828: cap 1: End par conjunct: 0x251ffb0
+19050427093: cap 1: End par conjunction: 0x251ffb0
+19050427224: cap 1: End par conjunct: 0x251ff50
+19050427458: cap 1: End par conjunction: 0x251ff50
+19050427593: cap 1: End par conjunct: 0x251fef0
+19050427719: cap 1: End par conjunction: 0x251fef0
+19050427849: cap 1: End par conjunct: 0x251fe90
+19050427980: cap 1: End par conjunction: 0x251fe90
+19050428115: cap 1: End par conjunct: 0x251fe30
+19050428241: cap 1: End par conjunction: 0x251fe30
+19050428367: cap 1: End par conjunct: 0x251fdd0
+19050428502: cap 1: End par conjunction: 0x251fdd0
+19050428632: cap 1: End par conjunct: 0x251fd70
+19050428763: cap 1: End par conjunction: 0x251fd70
+19050428889: cap 1: End par conjunct: 0x251fd10
+19050429024: cap 1: End par conjunction: 0x251fd10
+19050429159: cap 1: End par conjunct: 0x251fcb0
+19050429280: cap 1: End par conjunction: 0x251fcb0
+19050429406: cap 1: End par conjunct: 0x251fc50
+19050429537: cap 1: End par conjunction: 0x251fc50
+19050429667: cap 1: End par conjunct: 0x251fbf0
+19050429793: cap 1: End par conjunction: 0x251fbf0
+19050429924: cap 1: End par conjunct: 0x251fb90
+19050430050: cap 1: End par conjunction: 0x251fb90
+19050430180: cap 1: End par conjunct: 0x251fb30
+19050430311: cap 1: End par conjunction: 0x251fb30
+19050430437: cap 1: End par conjunct: 0x251fad0
+19050430563: cap 1: End par conjunction: 0x251fad0
+19050430693: cap 1: End par conjunct: 0x251fa70
+19050430824: cap 1: End par conjunction: 0x251fa70
+19050430950: cap 1: End par conjunct: 0x251fa10
+19050431076: cap 1: End par conjunction: 0x251fa10
+19050431211: cap 1: End par conjunct: 0x251f9b0
+19050431346: cap 1: End par conjunction: 0x251f9b0
+19050431476: cap 1: End par conjunct: 0x251f950
+19050431602: cap 1: End par conjunction: 0x251f950
+19050431737: cap 1: End par conjunct: 0x251f8f0
+19050431859: cap 1: End par conjunction: 0x251f8f0
+19050431989: cap 1: End par conjunct: 0x251f890
+19050432120: cap 1: End par conjunction: 0x251f890
+19050432255: cap 1: End par conjunct: 0x251f830
+19050432385: cap 1: End par conjunction: 0x251f830
+19050432507: cap 1: End par conjunct: 0x251f7d0
+19050432646: cap 1: End par conjunction: 0x251f7d0
+19050432772: cap 1: End par conjunct: 0x251f770
+19050432898: cap 1: End par conjunction: 0x251f770
+19050433024: cap 1: End par conjunct: 0x251f710
+19050433159: cap 1: End par conjunction: 0x251f710
+19050433290: cap 1: End par conjunct: 0x251f6b0
+19050433416: cap 1: End par conjunction: 0x251f6b0
+19050433542: cap 1: End par conjunct: 0x251f650
+19050433672: cap 1: End par conjunction: 0x251f650
+19050433803: cap 1: End par conjunct: 0x251f5f0
+19050433929: cap 1: End par conjunction: 0x251f5f0
+19050434059: cap 1: End par conjunct: 0x251f590
+19050434185: cap 1: End par conjunction: 0x251f590
+19050434311: cap 1: End par conjunct: 0x251f530
+19050434442: cap 1: End par conjunction: 0x251f530
+19050434568: cap 1: End par conjunct: 0x251f4d0
+19050434694: cap 1: End par conjunction: 0x251f4d0
+19050434824: cap 1: End par conjunct: 0x251f470
+19050434955: cap 1: End par conjunction: 0x251f470
+19050435085: cap 1: End par conjunct: 0x251f410
+19050435211: cap 1: End par conjunction: 0x251f410
+19050435337: cap 1: End par conjunct: 0x251f3b0
+19050435472: cap 1: End par conjunction: 0x251f3b0
+19050435603: cap 1: End par conjunct: 0x251f350
+19050435729: cap 1: End par conjunction: 0x251f350
+19050435873: cap 1: End par conjunct: 0x251f2f0
+19050435999: cap 1: End par conjunction: 0x251f2f0
+19050436129: cap 1: End par conjunct: 0x251f290
+19050436260: cap 1: End par conjunction: 0x251f290
+19050436507: cap 1: End par conjunct: 0x251f230
+19050436638: cap 1: End par conjunction: 0x251f230
+19050436764: cap 1: End par conjunct: 0x251f1d0
+19050437007: cap 1: End par conjunction: 0x251f1d0
+19050437137: cap 1: End par conjunct: 0x251f170
+19050437268: cap 1: End par conjunction: 0x251f170
+19050437394: cap 1: End par conjunct: 0x251f110
+19050437529: cap 1: End par conjunction: 0x251f110
+19050437659: cap 1: End par conjunct: 0x251f0b0
+19050437893: cap 1: End par conjunction: 0x251f0b0
+19050438024: cap 1: End par conjunct: 0x251f050
+19050438145: cap 1: End par conjunction: 0x251f050
+19050438280: cap 1: End par conjunct: 0x251eff0
+19050438519: cap 1: End par conjunction: 0x251eff0
+19050438649: cap 1: End par conjunct: 0x251ef90
+19050438780: cap 1: End par conjunction: 0x251ef90
+19050438924: cap 1: End par conjunct: 0x251ef30
+19050439054: cap 1: End par conjunction: 0x251ef30
+19050443919: cap 1: End par conjunct: 0x251eed0
+19050444036: cap 1: End par conjunction: 0x251eed0
+19050444171: cap 1: End par conjunct: 0x251ee70
+19050444306: cap 1: End par conjunction: 0x251ee70
+19050444441: cap 1: End par conjunct: 0x251ee10
+19050444562: cap 1: End par conjunction: 0x251ee10
+19050444693: cap 1: End par conjunct: 0x251edb0
+19050444828: cap 1: End par conjunction: 0x251edb0
+19050444963: cap 1: End par conjunct: 0x251ed50
+19050445089: cap 1: End par conjunction: 0x251ed50
+19050445224: cap 1: End par conjunct: 0x251ecf0
+19050445350: cap 1: End par conjunction: 0x251ecf0
+19050445485: cap 1: End par conjunct: 0x251ec90
+19050445611: cap 1: End par conjunction: 0x251ec90
+19050445755: cap 1: End par conjunct: 0x251ec30
+19050445881: cap 1: End par conjunction: 0x251ec30
+19050446007: cap 1: End par conjunct: 0x251ebd0
+19050446142: cap 1: End par conjunction: 0x251ebd0
+19050446272: cap 1: End par conjunct: 0x251eb70
+19050446403: cap 1: End par conjunction: 0x251eb70
+19050446524: cap 1: End par conjunct: 0x251eb10
+19050446659: cap 1: End par conjunction: 0x251eb10
+19050446794: cap 1: End par conjunct: 0x251eab0
+19050446916: cap 1: End par conjunction: 0x251eab0
+19050447042: cap 1: End par conjunct: 0x251ea50
+19050447172: cap 1: End par conjunction: 0x251ea50
+19050447303: cap 1: End par conjunct: 0x251e9f0
+19050447429: cap 1: End par conjunction: 0x251e9f0
+19050447559: cap 1: End par conjunct: 0x251e990
+19050447685: cap 1: End par conjunction: 0x251e990
+19050447820: cap 1: End par conjunct: 0x251e930
+19050447946: cap 1: End par conjunction: 0x251e930
+19050448077: cap 1: End par conjunct: 0x251e8d0
+19050448198: cap 1: End par conjunction: 0x251e8d0
+19050448329: cap 1: End par conjunct: 0x251e870
+19050448464: cap 1: End par conjunction: 0x251e870
+19050448594: cap 1: End par conjunct: 0x251e810
+19050448720: cap 1: End par conjunction: 0x251e810
+19050448851: cap 1: End par conjunct: 0x251e7b0
+19050448986: cap 1: End par conjunction: 0x251e7b0
+19050449116: cap 1: End par conjunct: 0x251e750
+19050449242: cap 1: End par conjunction: 0x251e750
+19050449377: cap 1: End par conjunct: 0x251e6f0
+19050449503: cap 1: End par conjunction: 0x251e6f0
+19050449638: cap 1: End par conjunct: 0x251e690
+19050449764: cap 1: End par conjunction: 0x251e690
+19050449904: cap 1: End par conjunct: 0x251e630
+19050450030: cap 1: End par conjunction: 0x251e630
+19050450156: cap 1: End par conjunct: 0x251e5d0
+19050450295: cap 1: End par conjunction: 0x251e5d0
+19050450426: cap 1: End par conjunct: 0x251e570
+19050450552: cap 1: End par conjunction: 0x251e570
+19050450678: cap 1: End par conjunct: 0x251e510
+19050450813: cap 1: End par conjunction: 0x251e510
+19050450948: cap 1: End par conjunct: 0x251e4b0
+19050451069: cap 1: End par conjunction: 0x251e4b0
+19050451195: cap 1: End par conjunct: 0x251e450
+19050451330: cap 1: End par conjunction: 0x251e450
+19050451461: cap 1: End par conjunct: 0x251e3f0
+19050451587: cap 1: End par conjunction: 0x251e3f0
+19050451717: cap 1: End par conjunct: 0x251e390
+19050451843: cap 1: End par conjunction: 0x251e390
+19050451974: cap 1: End par conjunct: 0x251e330
+19050452104: cap 1: End par conjunction: 0x251e330
+19050452230: cap 1: End par conjunct: 0x251e2d0
+19050452356: cap 1: End par conjunction: 0x251e2d0
+19050452487: cap 1: End par conjunct: 0x251e270
+19050452617: cap 1: End par conjunction: 0x251e270
+19050452748: cap 1: End par conjunct: 0x251e210
+19050452883: cap 1: End par conjunction: 0x251e210
+19050453009: cap 1: End par conjunct: 0x251e1b0
+19050453144: cap 1: End par conjunction: 0x251e1b0
+19050453270: cap 1: End par conjunct: 0x251e150
+19050453396: cap 1: End par conjunction: 0x251e150
+19050453531: cap 1: End par conjunct: 0x251e0f0
+19050453657: cap 1: End par conjunction: 0x251e0f0
+19050453787: cap 1: End par conjunct: 0x251e090
+19050453918: cap 1: End par conjunction: 0x251e090
+19050454048: cap 1: End par conjunct: 0x251e030
+19050454170: cap 1: End par conjunction: 0x251e030
+19050454296: cap 1: End par conjunct: 0x251dfd0
+19050454566: cap 1: End par conjunction: 0x251dfd0
+19050454800: cap 1: End par conjunct: 0x251df70
+19050455052: cap 1: End par conjunction: 0x251df70
+19050455178: cap 1: End par conjunct: 0x251df10
+19050455317: cap 1: End par conjunction: 0x251df10
+19050455448: cap 1: End par conjunct: 0x251deb0
+19050455574: cap 1: End par conjunction: 0x251deb0
+19050455700: cap 1: End par conjunct: 0x251de50
+19050455826: cap 1: End par conjunction: 0x251de50
+19050455956: cap 1: End par conjunct: 0x251ddf0
+19050456082: cap 1: End par conjunction: 0x251ddf0
+19050456213: cap 1: End par conjunct: 0x251dd90
+19050456339: cap 1: End par conjunction: 0x251dd90
+19050456469: cap 1: End par conjunct: 0x251dd30
+19050456600: cap 1: End par conjunction: 0x251dd30
+19050456726: cap 1: End par conjunct: 0x251dcd0
+19050456852: cap 1: End par conjunction: 0x251dcd0
+19050456982: cap 1: End par conjunct: 0x251dc70
+19050457117: cap 1: End par conjunction: 0x251dc70
+19050457248: cap 1: End par conjunct: 0x251dc10
+19050457374: cap 1: End par conjunction: 0x251dc10
+19050457500: cap 1: End par conjunct: 0x251dbb0
+19050457635: cap 1: End par conjunction: 0x251dbb0
+19050457761: cap 1: End par conjunct: 0x251db50
+19050457891: cap 1: End par conjunction: 0x251db50
+19050458022: cap 1: End par conjunct: 0x251daf0
+19050458148: cap 1: End par conjunction: 0x251daf0
+19050458278: cap 1: End par conjunct: 0x251da90
+19050458409: cap 1: End par conjunction: 0x251da90
+19050458539: cap 1: End par conjunct: 0x251da30
+19050458670: cap 1: End par conjunction: 0x251da30
+19050458796: cap 1: End par conjunct: 0x251d9d0
+19050458931: cap 1: End par conjunction: 0x251d9d0
+19050459061: cap 1: End par conjunct: 0x251d970
+19050459192: cap 1: End par conjunction: 0x251d970
+19050459318: cap 1: End par conjunct: 0x251d910
+19050459453: cap 1: End par conjunction: 0x251d910
+19050459579: cap 1: End par conjunct: 0x251d8b0
+19050459709: cap 1: End par conjunction: 0x251d8b0
+19050459835: cap 1: End par conjunct: 0x251d850
+19050459966: cap 1: End par conjunction: 0x251d850
+19050460096: cap 1: End par conjunct: 0x251d7f0
+19050460222: cap 1: End par conjunction: 0x251d7f0
+19050460348: cap 1: End par conjunct: 0x251d790
+19050460474: cap 1: End par conjunction: 0x251d790
+19050460605: cap 1: End par conjunct: 0x251d730
+19050460735: cap 1: End par conjunction: 0x251d730
+19050460866: cap 1: End par conjunct: 0x251d6d0
+19050460987: cap 1: End par conjunction: 0x251d6d0
+19050461118: cap 1: End par conjunct: 0x251d670
+19050461248: cap 1: End par conjunction: 0x251d670
+19050461379: cap 1: End par conjunct: 0x251d610
+19050461509: cap 1: End par conjunction: 0x251d610
+19050461635: cap 1: End par conjunct: 0x251d5b0
+19050461770: cap 1: End par conjunction: 0x251d5b0
+19050461901: cap 1: End par conjunct: 0x251d550
+19050462031: cap 1: End par conjunction: 0x251d550
+19050462162: cap 1: End par conjunct: 0x251d4f0
+19050462288: cap 1: End par conjunction: 0x251d4f0
+19050462418: cap 1: End par conjunct: 0x251d490
+19050462544: cap 1: End par conjunction: 0x251d490
+19050462679: cap 1: End par conjunct: 0x251d430
+19050462805: cap 1: End par conjunction: 0x251d430
+19050462931: cap 1: End par conjunct: 0x251d3d0
+19050463066: cap 1: End par conjunction: 0x251d3d0
+19050463197: cap 1: End par conjunct: 0x251d370
+19050463323: cap 1: End par conjunction: 0x251d370
+19050463453: cap 1: End par conjunct: 0x251d310
+19050463588: cap 1: End par conjunction: 0x251d310
+19050463719: cap 1: End par conjunct: 0x251d2b0
+19050463845: cap 1: End par conjunction: 0x251d2b0
+19050463971: cap 1: End par conjunct: 0x251d250
+19050464101: cap 1: End par conjunction: 0x251d250
+19050464232: cap 1: End par conjunct: 0x251d1f0
+19050464353: cap 1: End par conjunction: 0x251d1f0
+19050464484: cap 1: End par conjunct: 0x251d190
+19050464610: cap 1: End par conjunction: 0x251d190
+19050464740: cap 1: End par conjunct: 0x251d130
+19050464871: cap 1: End par conjunction: 0x251d130
+19050465001: cap 1: End par conjunct: 0x251d0d0
+19050465123: cap 1: End par conjunction: 0x251d0d0
+19050465258: cap 1: End par conjunct: 0x251d070
+19050465388: cap 1: End par conjunction: 0x251d070
+19050465519: cap 1: End par conjunct: 0x251d010
+19050465640: cap 1: End par conjunction: 0x251d010
+19050465883: cap 1: End par conjunct: 0x251cfb0
+19050466297: cap 1: End par conjunction: 0x251cfb0
+19050466423: cap 1: End par conjunct: 0x251cf50
+19050466648: cap 1: End par conjunction: 0x251cf50
+19050466783: cap 1: End par conjunct: 0x251cef0
+19050466909: cap 1: End par conjunction: 0x251cef0
+19050467040: cap 1: End par conjunct: 0x251ce90
+19050467170: cap 1: End par conjunction: 0x251ce90
+19050467305: cap 1: End par conjunct: 0x251ce30
+19050467431: cap 1: End par conjunction: 0x251ce30
+19050467557: cap 1: End par conjunct: 0x251cdd0
+19050467697: cap 1: End par conjunction: 0x251cdd0
+19050467823: cap 1: End par conjunct: 0x251cd70
+19050467953: cap 1: End par conjunction: 0x251cd70
+19050468079: cap 1: End par conjunct: 0x251cd10
+19050468214: cap 1: End par conjunction: 0x251cd10
+19050468345: cap 1: End par conjunct: 0x251ccb0
+19050468471: cap 1: End par conjunction: 0x251ccb0
+19050468597: cap 1: End par conjunct: 0x251cc50
+19050468727: cap 1: End par conjunction: 0x251cc50
+19050468858: cap 1: End par conjunct: 0x251cbf0
+19050468984: cap 1: End par conjunction: 0x251cbf0
+19050469110: cap 1: End par conjunct: 0x251cb90
+19050469236: cap 1: End par conjunction: 0x251cb90
+19050469366: cap 1: End par conjunct: 0x251cb30
+19050469497: cap 1: End par conjunction: 0x251cb30
+19050469623: cap 1: End par conjunct: 0x251cad0
+19050469749: cap 1: End par conjunction: 0x251cad0
+19050469879: cap 1: End par conjunct: 0x251ca70
+19050470014: cap 1: End par conjunction: 0x251ca70
+19050470145: cap 1: End par conjunct: 0x251ca10
+19050470266: cap 1: End par conjunction: 0x251ca10
+19050470397: cap 1: End par conjunct: 0x251c9b0
+19050470532: cap 1: End par conjunction: 0x251c9b0
+19050470662: cap 1: End par conjunct: 0x251c950
+19050470788: cap 1: End par conjunction: 0x251c950
+19050470923: cap 1: End par conjunct: 0x251c8f0
+19050471045: cap 1: End par conjunction: 0x251c8f0
+19050471175: cap 1: End par conjunct: 0x251c890
+19050471306: cap 1: End par conjunction: 0x251c890
+19050471441: cap 1: End par conjunct: 0x251c830
+19050471567: cap 1: End par conjunction: 0x251c830
+19050471693: cap 1: End par conjunct: 0x251c7d0
+19050471945: cap 1: End par conjunction: 0x251c7d0
+19050472075: cap 1: End par conjunct: 0x251c770
+19050472201: cap 1: End par conjunction: 0x251c770
+19050472327: cap 1: End par conjunct: 0x251c710
+19050472566: cap 1: End par conjunction: 0x251c710
+19050472696: cap 1: End par conjunct: 0x251c6b0
+19050472822: cap 1: End par conjunction: 0x251c6b0
+19050472948: cap 1: End par conjunct: 0x251c650
+19050473074: cap 1: End par conjunction: 0x251c650
+19050473205: cap 1: End par conjunct: 0x251c5f0
+19050473331: cap 1: End par conjunction: 0x251c5f0
+19050473461: cap 1: End par conjunct: 0x251c590
+19050473587: cap 1: End par conjunction: 0x251c590
+19050473718: cap 1: End par conjunct: 0x251c530
+19050473848: cap 1: End par conjunction: 0x251c530
+19050473974: cap 1: End par conjunct: 0x251c4d0
+19050474100: cap 1: End par conjunction: 0x251c4d0
+19050474231: cap 1: End par conjunct: 0x251c470
+19050474361: cap 1: End par conjunction: 0x251c470
+19050474492: cap 1: End par conjunct: 0x251c410
+19050474618: cap 1: End par conjunction: 0x251c410
+19050474748: cap 1: End par conjunct: 0x251c3b0
+19050474879: cap 1: End par conjunction: 0x251c3b0
+19050475009: cap 1: End par conjunct: 0x251c350
+19050475135: cap 1: End par conjunction: 0x251c350
+19050475270: cap 1: End par conjunct: 0x251c2f0
+19050475396: cap 1: End par conjunction: 0x251c2f0
+19050475527: cap 1: End par conjunct: 0x251c290
+19050475657: cap 1: End par conjunction: 0x251c290
+19050475788: cap 1: End par conjunct: 0x251c230
+19050475914: cap 1: End par conjunction: 0x251c230
+19050476040: cap 1: End par conjunct: 0x251c1d0
+19050476179: cap 1: End par conjunction: 0x251c1d0
+19050476305: cap 1: End par conjunct: 0x251c170
+19050476436: cap 1: End par conjunction: 0x251c170
+19050476557: cap 1: End par conjunct: 0x251c110
+19050476692: cap 1: End par conjunction: 0x251c110
+19050476823: cap 1: End par conjunct: 0x251c0b0
+19050477061: cap 1: End par conjunction: 0x251c0b0
+19050477187: cap 1: End par conjunct: 0x251c050
+19050477313: cap 1: End par conjunction: 0x251c050
+19050477444: cap 1: End par conjunct: 0x251bff0
+19050477678: cap 1: End par conjunction: 0x251bff0
+19050477808: cap 1: End par conjunct: 0x251bf90
+19050477934: cap 1: End par conjunction: 0x251bf90
+19050478069: cap 1: End par conjunct: 0x251bf30
+19050478200: cap 1: End par conjunction: 0x251bf30
+19050478326: cap 1: End par conjunct: 0x251bed0
+19050478452: cap 1: End par conjunction: 0x251bed0
+19050478582: cap 1: End par conjunct: 0x251be70
+19050478713: cap 1: End par conjunction: 0x251be70
+19050478843: cap 1: End par conjunct: 0x251be10
+19050478969: cap 1: End par conjunction: 0x251be10
+19050479095: cap 1: End par conjunct: 0x251bdb0
+19050479230: cap 1: End par conjunction: 0x251bdb0
+19050479361: cap 1: End par conjunct: 0x251bd50
+19050479487: cap 1: End par conjunction: 0x251bd50
+19050479622: cap 1: End par conjunct: 0x251bcf0
+19050479748: cap 1: End par conjunction: 0x251bcf0
+19050479878: cap 1: End par conjunct: 0x251bc90
+19050480009: cap 1: End par conjunction: 0x251bc90
+19050480144: cap 1: End par conjunct: 0x251bc30
+19050480270: cap 1: End par conjunction: 0x251bc30
+19050480396: cap 1: End par conjunct: 0x251bbd0
+19050480531: cap 1: End par conjunction: 0x251bbd0
+19050480657: cap 1: End par conjunct: 0x251bb70
+19050480783: cap 1: End par conjunction: 0x251bb70
+19050480909: cap 1: End par conjunct: 0x251bb10
+19050481048: cap 1: End par conjunction: 0x251bb10
+19050481174: cap 1: End par conjunct: 0x251bab0
+19050481300: cap 1: End par conjunction: 0x251bab0
+19050481426: cap 1: End par conjunct: 0x251ba50
+19050481557: cap 1: End par conjunction: 0x251ba50
+19050481687: cap 1: End par conjunct: 0x251b9f0
+19050481813: cap 1: End par conjunction: 0x251b9f0
+19050481944: cap 1: End par conjunct: 0x251b990
+19050482065: cap 1: End par conjunction: 0x251b990
+19050482196: cap 1: End par conjunct: 0x251b930
+19050482326: cap 1: End par conjunction: 0x251b930
+19050482452: cap 1: End par conjunct: 0x251b8d0
+19050482578: cap 1: End par conjunction: 0x251b8d0
+19050482709: cap 1: End par conjunct: 0x251b870
+19050482844: cap 1: End par conjunction: 0x251b870
+19050482974: cap 1: End par conjunct: 0x251b810
+19050483100: cap 1: End par conjunction: 0x251b810
+19050483226: cap 1: End par conjunct: 0x251b7b0
+19050483357: cap 1: End par conjunction: 0x251b7b0
+19050483487: cap 1: End par conjunct: 0x251b750
+19050483618: cap 1: End par conjunction: 0x251b750
+19050483748: cap 1: End par conjunct: 0x251b6f0
+19050483874: cap 1: End par conjunction: 0x251b6f0
+19050484005: cap 1: End par conjunct: 0x251b690
+19050484135: cap 1: End par conjunction: 0x251b690
+19050484311: cap 1: End par conjunct: 0x251b630
+19050484441: cap 1: End par conjunction: 0x251b630
+19050484567: cap 1: End par conjunct: 0x251b5d0
+19050484702: cap 1: End par conjunction: 0x251b5d0
+19050484869: cap 1: End par conjunct: 0x251b570
+19050484999: cap 1: End par conjunction: 0x251b570
+19050485166: cap 1: End par conjunct: 0x251b510
+19050485301: cap 1: End par conjunction: 0x251b510
+19050485467: cap 1: End par conjunct: 0x251b4b0
+19050485593: cap 1: End par conjunction: 0x251b4b0
+19050485724: cap 1: End par conjunct: 0x251b450
+19050485854: cap 1: End par conjunction: 0x251b450
+19050485989: cap 1: End par conjunct: 0x251b3f0
+19050486115: cap 1: End par conjunction: 0x251b3f0
+19050486246: cap 1: End par conjunct: 0x251b390
+19050486372: cap 1: End par conjunction: 0x251b390
+19050486507: cap 1: End par conjunct: 0x251b330
+19050486637: cap 1: End par conjunction: 0x251b330
+19050486768: cap 1: End par conjunct: 0x251b2d0
+19050486894: cap 1: End par conjunction: 0x251b2d0
+19050487029: cap 1: End par conjunct: 0x251b270
+19050487159: cap 1: End par conjunction: 0x251b270
+19050487294: cap 1: End par conjunct: 0x251b210
+19050487420: cap 1: End par conjunction: 0x251b210
+19050487551: cap 1: End par conjunct: 0x251b1b0
+19050487686: cap 1: End par conjunction: 0x251b1b0
+19050487816: cap 1: End par conjunct: 0x251b150
+19050487947: cap 1: End par conjunction: 0x251b150
+19050488082: cap 1: End par conjunct: 0x251b0f0
+19050488208: cap 1: End par conjunction: 0x251b0f0
+19050488338: cap 1: End par conjunct: 0x251b090
+19050488469: cap 1: End par conjunction: 0x251b090
+19050488604: cap 1: End par conjunct: 0x251b030
+19050488725: cap 1: End par conjunction: 0x251b030
+19050488856: cap 1: End par conjunct: 0x251afd0
+19050489112: cap 1: End par conjunction: 0x251afd0
+19050489355: cap 1: End par conjunct: 0x251af70
+19050489598: cap 1: End par conjunction: 0x251af70
+19050489724: cap 1: End par conjunct: 0x251af10
+19050489859: cap 1: End par conjunction: 0x251af10
+19050489985: cap 1: End par conjunct: 0x251aeb0
+19050490111: cap 1: End par conjunction: 0x251aeb0
+19050490237: cap 1: End par conjunct: 0x251ae50
+19050490368: cap 1: End par conjunction: 0x251ae50
+19050490494: cap 1: End par conjunct: 0x251adf0
+19050490620: cap 1: End par conjunction: 0x251adf0
+19050490750: cap 1: End par conjunct: 0x251ad90
+19050490876: cap 1: End par conjunction: 0x251ad90
+19050491007: cap 1: End par conjunct: 0x251ad30
+19050491133: cap 1: End par conjunction: 0x251ad30
+19050491263: cap 1: End par conjunct: 0x251acd0
+19050491389: cap 1: End par conjunction: 0x251acd0
+19050491520: cap 1: End par conjunct: 0x251ac70
+19050491650: cap 1: End par conjunction: 0x251ac70
+19050491781: cap 1: End par conjunct: 0x251ac10
+19050491907: cap 1: End par conjunction: 0x251ac10
+19050492033: cap 1: End par conjunct: 0x251abb0
+19050492163: cap 1: End par conjunction: 0x251abb0
+19050492298: cap 1: End par conjunct: 0x251ab50
+19050492424: cap 1: End par conjunction: 0x251ab50
+19050492559: cap 1: End par conjunct: 0x251aaf0
+19050492685: cap 1: End par conjunction: 0x251aaf0
+19050492820: cap 1: End par conjunct: 0x251aa90
+19050492951: cap 1: End par conjunction: 0x251aa90
+19050493086: cap 1: End par conjunct: 0x251aa30
+19050493216: cap 1: End par conjunction: 0x251aa30
+19050493342: cap 1: End par conjunct: 0x251a9d0
+19050493477: cap 1: End par conjunction: 0x251a9d0
+19050493608: cap 1: End par conjunct: 0x251a970
+19050493734: cap 1: End par conjunction: 0x251a970
+19050493864: cap 1: End par conjunct: 0x251a910
+19050493999: cap 1: End par conjunction: 0x251a910
+19050494130: cap 1: End par conjunct: 0x251a8b0
+19050494256: cap 1: End par conjunction: 0x251a8b0
+19050494382: cap 1: End par conjunct: 0x251a850
+19050494512: cap 1: End par conjunction: 0x251a850
+19050494643: cap 1: End par conjunct: 0x251a7f0
+19050494769: cap 1: End par conjunction: 0x251a7f0
+19050494899: cap 1: End par conjunct: 0x251a790
+19050495025: cap 1: End par conjunction: 0x251a790
+19050495151: cap 1: End par conjunct: 0x251a730
+19050495282: cap 1: End par conjunction: 0x251a730
+19050495412: cap 1: End par conjunct: 0x251a6d0
+19050495538: cap 1: End par conjunction: 0x251a6d0
+19050495664: cap 1: End par conjunct: 0x251a670
+19050495795: cap 1: End par conjunction: 0x251a670
+19050495925: cap 1: End par conjunct: 0x251a610
+19050496051: cap 1: End par conjunction: 0x251a610
+19050496182: cap 1: End par conjunct: 0x251a5b0
+19050496317: cap 1: End par conjunction: 0x251a5b0
+19050496452: cap 1: End par conjunct: 0x251a550
+19050496578: cap 1: End par conjunction: 0x251a550
+19050496713: cap 1: End par conjunct: 0x251a4f0
+19050496839: cap 1: End par conjunction: 0x251a4f0
+19050496974: cap 1: End par conjunct: 0x251a490
+19050497100: cap 1: End par conjunction: 0x251a490
+19050497235: cap 1: End par conjunct: 0x251a430
+19050497361: cap 1: End par conjunction: 0x251a430
+19050497491: cap 1: End par conjunct: 0x251a3d0
+19050497626: cap 1: End par conjunction: 0x251a3d0
+19050497752: cap 1: End par conjunct: 0x251a370
+19050497883: cap 1: End par conjunction: 0x251a370
+19050498009: cap 1: End par conjunct: 0x251a310
+19050498144: cap 1: End par conjunction: 0x251a310
+19050498319: cap 1: End par conjunct: 0x251a2b0
+19050498441: cap 1: End par conjunction: 0x251a2b0
+19050498571: cap 1: End par conjunct: 0x251a250
+19050498697: cap 1: End par conjunction: 0x251a250
+19050498832: cap 1: End par conjunct: 0x251a1f0
+19050498958: cap 1: End par conjunction: 0x251a1f0
+19050499089: cap 1: End par conjunct: 0x251a190
+19050499210: cap 1: End par conjunction: 0x251a190
+19050499345: cap 1: End par conjunct: 0x251a130
+19050499471: cap 1: End par conjunction: 0x251a130
+19050499602: cap 1: End par conjunct: 0x251a0d0
+19050499728: cap 1: End par conjunction: 0x251a0d0
+19050499863: cap 1: End par conjunct: 0x251a070
+19050499993: cap 1: End par conjunction: 0x251a070
+19050500124: cap 1: End par conjunct: 0x251a010
+19050500245: cap 1: End par conjunction: 0x251a010
+19050500493: cap 1: End par conjunct: 0x2519fb0
+19050500740: cap 1: End par conjunction: 0x2519fb0
+19050500871: cap 1: End par conjunct: 0x2519f50
+19050501078: cap 1: End par conjunction: 0x2519f50
+19050501213: cap 1: End par conjunct: 0x2519ef0
+19050501334: cap 1: End par conjunction: 0x2519ef0
+19050501469: cap 1: End par conjunct: 0x2519e90
+19050501595: cap 1: End par conjunction: 0x2519e90
+19050501735: cap 1: End par conjunct: 0x2519e30
+19050501865: cap 1: End par conjunction: 0x2519e30
+19050501991: cap 1: End par conjunct: 0x2519dd0
+19050502126: cap 1: End par conjunction: 0x2519dd0
+19050502257: cap 1: End par conjunct: 0x2519d70
+19050502383: cap 1: End par conjunction: 0x2519d70
+19050502513: cap 1: End par conjunct: 0x2519d10
+19050502752: cap 1: End par conjunction: 0x2519d10
+19050502882: cap 1: End par conjunct: 0x2519cb0
+19050503008: cap 1: End par conjunction: 0x2519cb0
+19050503134: cap 1: End par conjunct: 0x2519c50
+19050503368: cap 1: End par conjunction: 0x2519c50
+19050503503: cap 1: End par conjunct: 0x2519bf0
+19050503629: cap 1: End par conjunction: 0x2519bf0
+19050503760: cap 1: End par conjunct: 0x2519b90
+19050503881: cap 1: End par conjunction: 0x2519b90
+19050504007: cap 1: End par conjunct: 0x2519b30
+19050504138: cap 1: End par conjunction: 0x2519b30
+19050504268: cap 1: End par conjunct: 0x2519ad0
+19050504390: cap 1: End par conjunction: 0x2519ad0
+19050504520: cap 1: End par conjunct: 0x2519a70
+19050504651: cap 1: End par conjunction: 0x2519a70
+19050504781: cap 1: End par conjunct: 0x2519a10
+19050504907: cap 1: End par conjunction: 0x2519a10
+19050505033: cap 1: End par conjunct: 0x25199b0
+19050505168: cap 1: End par conjunction: 0x25199b0
+19050505299: cap 1: End par conjunct: 0x2519950
+19050505429: cap 1: End par conjunction: 0x2519950
+19050505560: cap 1: End par conjunct: 0x25198f0
+19050505686: cap 1: End par conjunction: 0x25198f0
+19050505816: cap 1: End par conjunct: 0x2519890
+19050505947: cap 1: End par conjunction: 0x2519890
+19050506082: cap 1: End par conjunct: 0x2519830
+19050506208: cap 1: End par conjunction: 0x2519830
+19050506338: cap 1: End par conjunct: 0x25197d0
+19050506469: cap 1: End par conjunction: 0x25197d0
+19050506599: cap 1: End par conjunct: 0x2519770
+19050506725: cap 1: End par conjunction: 0x2519770
+19050506851: cap 1: End par conjunct: 0x2519710
+19050506986: cap 1: End par conjunction: 0x2519710
+19050507117: cap 1: End par conjunct: 0x25196b0
+19050507238: cap 1: End par conjunction: 0x25196b0
+19050507369: cap 1: End par conjunct: 0x2519650
+19050507495: cap 1: End par conjunction: 0x2519650
+19050507625: cap 1: End par conjunct: 0x25195f0
+19050507751: cap 1: End par conjunction: 0x25195f0
+19050507882: cap 1: End par conjunct: 0x2519590
+19050508003: cap 1: End par conjunction: 0x2519590
+19050508134: cap 1: End par conjunct: 0x2519530
+19050508264: cap 1: End par conjunction: 0x2519530
+19050508390: cap 1: End par conjunct: 0x25194d0
+19050508516: cap 1: End par conjunction: 0x25194d0
+19050508647: cap 1: End par conjunct: 0x2519470
+19050508782: cap 1: End par conjunction: 0x2519470
+19050508908: cap 1: End par conjunct: 0x2519410
+19050509034: cap 1: End par conjunction: 0x2519410
+19050509169: cap 1: End par conjunct: 0x25193b0
+19050509299: cap 1: End par conjunction: 0x25193b0
+19050509434: cap 1: End par conjunct: 0x2519350
+19050509560: cap 1: End par conjunction: 0x2519350
+19050509704: cap 1: End par conjunct: 0x25192f0
+19050509830: cap 1: End par conjunction: 0x25192f0
+19050509961: cap 1: End par conjunct: 0x2519290
+19050510091: cap 1: End par conjunction: 0x2519290
+19050510226: cap 1: End par conjunct: 0x2519230
+19050510352: cap 1: End par conjunction: 0x2519230
+19050510478: cap 1: End par conjunct: 0x25191d0
+19050510613: cap 1: End par conjunction: 0x25191d0
+19050510739: cap 1: End par conjunct: 0x2519170
+19050510870: cap 1: End par conjunction: 0x2519170
+19050510996: cap 1: End par conjunct: 0x2519110
+19050511131: cap 1: End par conjunction: 0x2519110
+19050511261: cap 1: End par conjunct: 0x25190b0
+19050511495: cap 1: End par conjunction: 0x25190b0
+19050511626: cap 1: End par conjunct: 0x2519050
+19050511747: cap 1: End par conjunction: 0x2519050
+19050511878: cap 1: End par conjunct: 0x2518ff0
+19050512121: cap 1: End par conjunction: 0x2518ff0
+19050512251: cap 1: End par conjunct: 0x2518f90
+19050512382: cap 1: End par conjunction: 0x2518f90
+19050512526: cap 1: End par conjunct: 0x2518f30
+19050512652: cap 1: End par conjunction: 0x2518f30
+19050517093: cap 1: End par conjunct: 0x2518ed0
+19050517215: cap 1: End par conjunction: 0x2518ed0
+19050517345: cap 1: End par conjunct: 0x2518e70
+19050517485: cap 1: End par conjunction: 0x2518e70
+19050517615: cap 1: End par conjunct: 0x2518e10
+19050517741: cap 1: End par conjunction: 0x2518e10
+19050517867: cap 1: End par conjunct: 0x2518db0
+19050518002: cap 1: End par conjunction: 0x2518db0
+19050518133: cap 1: End par conjunct: 0x2518d50
+19050518259: cap 1: End par conjunction: 0x2518d50
+19050518394: cap 1: End par conjunct: 0x2518cf0
+19050518520: cap 1: End par conjunction: 0x2518cf0
+19050518650: cap 1: End par conjunct: 0x2518c90
+19050518781: cap 1: End par conjunction: 0x2518c90
+19050518911: cap 1: End par conjunct: 0x2518c30
+19050519037: cap 1: End par conjunction: 0x2518c30
+19050519163: cap 1: End par conjunct: 0x2518bd0
+19050519298: cap 1: End par conjunction: 0x2518bd0
+19050519429: cap 1: End par conjunct: 0x2518b70
+19050519559: cap 1: End par conjunction: 0x2518b70
+19050519681: cap 1: End par conjunct: 0x2518b10
+19050519816: cap 1: End par conjunction: 0x2518b10
+19050519942: cap 1: End par conjunct: 0x2518ab0
+19050520068: cap 1: End par conjunction: 0x2518ab0
+19050520194: cap 1: End par conjunct: 0x2518a50
+19050520324: cap 1: End par conjunction: 0x2518a50
+19050520455: cap 1: End par conjunct: 0x25189f0
+19050520581: cap 1: End par conjunction: 0x25189f0
+19050520711: cap 1: End par conjunct: 0x2518990
+19050520837: cap 1: End par conjunction: 0x2518990
+19050520963: cap 1: End par conjunct: 0x2518930
+19050521089: cap 1: End par conjunction: 0x2518930
+19050521220: cap 1: End par conjunct: 0x25188d0
+19050521341: cap 1: End par conjunction: 0x25188d0
+19050521472: cap 1: End par conjunct: 0x2518870
+19050521607: cap 1: End par conjunction: 0x2518870
+19050521737: cap 1: End par conjunct: 0x2518810
+19050521863: cap 1: End par conjunction: 0x2518810
+19050521989: cap 1: End par conjunct: 0x25187b0
+19050522124: cap 1: End par conjunction: 0x25187b0
+19050522255: cap 1: End par conjunct: 0x2518750
+19050522381: cap 1: End par conjunction: 0x2518750
+19050522516: cap 1: End par conjunct: 0x25186f0
+19050522642: cap 1: End par conjunction: 0x25186f0
+19050522772: cap 1: End par conjunct: 0x2518690
+19050522903: cap 1: End par conjunction: 0x2518690
+19050523038: cap 1: End par conjunct: 0x2518630
+19050523164: cap 1: End par conjunction: 0x2518630
+19050523290: cap 1: End par conjunct: 0x25185d0
+19050523429: cap 1: End par conjunction: 0x25185d0
+19050523555: cap 1: End par conjunct: 0x2518570
+19050523686: cap 1: End par conjunction: 0x2518570
+19050523812: cap 1: End par conjunct: 0x2518510
+19050523947: cap 1: End par conjunction: 0x2518510
+19050524073: cap 1: End par conjunct: 0x25184b0
+19050524199: cap 1: End par conjunction: 0x25184b0
+19050524325: cap 1: End par conjunct: 0x2518450
+19050524455: cap 1: End par conjunction: 0x2518450
+19050524586: cap 1: End par conjunct: 0x25183f0
+19050524712: cap 1: End par conjunction: 0x25183f0
+19050524842: cap 1: End par conjunct: 0x2518390
+19050524968: cap 1: End par conjunction: 0x2518390
+19050525094: cap 1: End par conjunct: 0x2518330
+19050525220: cap 1: End par conjunction: 0x2518330
+19050525346: cap 1: End par conjunct: 0x25182d0
+19050525472: cap 1: End par conjunction: 0x25182d0
+19050525603: cap 1: End par conjunct: 0x2518270
+19050525733: cap 1: End par conjunction: 0x2518270
+19050525868: cap 1: End par conjunct: 0x2518210
+19050525994: cap 1: End par conjunction: 0x2518210
+19050526120: cap 1: End par conjunct: 0x25181b0
+19050526255: cap 1: End par conjunction: 0x25181b0
+19050526381: cap 1: End par conjunct: 0x2518150
+19050526512: cap 1: End par conjunction: 0x2518150
+19050526647: cap 1: End par conjunct: 0x25180f0
+19050526773: cap 1: End par conjunction: 0x25180f0
+19050526899: cap 1: End par conjunct: 0x2518090
+19050527029: cap 1: End par conjunction: 0x2518090
+19050527164: cap 1: End par conjunct: 0x2518030
+19050527281: cap 1: End par conjunction: 0x2518030
+19050527407: cap 1: End par conjunct: 0x2517fd0
+19050527682: cap 1: End par conjunction: 0x2517fd0
+19050527925: cap 1: End par conjunct: 0x2517f70
+19050528172: cap 1: End par conjunction: 0x2517f70
+19050528298: cap 1: End par conjunct: 0x2517f10
+19050528433: cap 1: End par conjunction: 0x2517f10
+19050528564: cap 1: End par conjunct: 0x2517eb0
+19050528690: cap 1: End par conjunction: 0x2517eb0
+19050528816: cap 1: End par conjunct: 0x2517e50
+19050528942: cap 1: End par conjunction: 0x2517e50
+19050529077: cap 1: End par conjunct: 0x2517df0
+19050529203: cap 1: End par conjunction: 0x2517df0
+19050529333: cap 1: End par conjunct: 0x2517d90
+19050529459: cap 1: End par conjunction: 0x2517d90
+19050529590: cap 1: End par conjunct: 0x2517d30
+19050529720: cap 1: End par conjunction: 0x2517d30
+19050529846: cap 1: End par conjunct: 0x2517cd0
+19050529972: cap 1: End par conjunction: 0x2517cd0
+19050530103: cap 1: End par conjunct: 0x2517c70
+19050530238: cap 1: End par conjunction: 0x2517c70
+19050530373: cap 1: End par conjunct: 0x2517c10
+19050530494: cap 1: End par conjunction: 0x2517c10
+19050530625: cap 1: End par conjunct: 0x2517bb0
+19050530755: cap 1: End par conjunction: 0x2517bb0
+19050530886: cap 1: End par conjunct: 0x2517b50
+19050531016: cap 1: End par conjunction: 0x2517b50
+19050531147: cap 1: End par conjunct: 0x2517af0
+19050531273: cap 1: End par conjunction: 0x2517af0
+19050531403: cap 1: End par conjunct: 0x2517a90
+19050531534: cap 1: End par conjunction: 0x2517a90
+19050531669: cap 1: End par conjunct: 0x2517a30
+19050531795: cap 1: End par conjunction: 0x2517a30
+19050531921: cap 1: End par conjunct: 0x25179d0
+19050532060: cap 1: End par conjunction: 0x25179d0
+19050532186: cap 1: End par conjunct: 0x2517970
+19050532317: cap 1: End par conjunction: 0x2517970
+19050532443: cap 1: End par conjunct: 0x2517910
+19050532578: cap 1: End par conjunction: 0x2517910
+19050532704: cap 1: End par conjunct: 0x25178b0
+19050532830: cap 1: End par conjunction: 0x25178b0
+19050532956: cap 1: End par conjunct: 0x2517850
+19050533086: cap 1: End par conjunction: 0x2517850
+19050533221: cap 1: End par conjunct: 0x25177f0
+19050533343: cap 1: End par conjunction: 0x25177f0
+19050533473: cap 1: End par conjunct: 0x2517790
+19050533599: cap 1: End par conjunction: 0x2517790
+19050533730: cap 1: End par conjunct: 0x2517730
+19050533860: cap 1: End par conjunction: 0x2517730
+19050533991: cap 1: End par conjunct: 0x25176d0
+19050534117: cap 1: End par conjunction: 0x25176d0
+19050534247: cap 1: End par conjunct: 0x2517670
+19050534378: cap 1: End par conjunction: 0x2517670
+19050534513: cap 1: End par conjunct: 0x2517610
+19050534634: cap 1: End par conjunction: 0x2517610
+19050534765: cap 1: End par conjunct: 0x25175b0
+19050534900: cap 1: End par conjunction: 0x25175b0
+19050535030: cap 1: End par conjunct: 0x2517550
+19050535156: cap 1: End par conjunction: 0x2517550
+19050535291: cap 1: End par conjunct: 0x25174f0
+19050535417: cap 1: End par conjunction: 0x25174f0
+19050535548: cap 1: End par conjunct: 0x2517490
+19050535678: cap 1: End par conjunction: 0x2517490
+19050535809: cap 1: End par conjunct: 0x2517430
+19050535939: cap 1: End par conjunction: 0x2517430
+19050536065: cap 1: End par conjunct: 0x25173d0
+19050536200: cap 1: End par conjunction: 0x25173d0
+19050536326: cap 1: End par conjunct: 0x2517370
+19050536457: cap 1: End par conjunction: 0x2517370
+19050536583: cap 1: End par conjunct: 0x2517310
+19050536722: cap 1: End par conjunction: 0x2517310
+19050536848: cap 1: End par conjunct: 0x25172b0
+19050536974: cap 1: End par conjunction: 0x25172b0
+19050537100: cap 1: End par conjunct: 0x2517250
+19050537343: cap 1: End par conjunction: 0x2517250
+19050537474: cap 1: End par conjunct: 0x25171f0
+19050537600: cap 1: End par conjunction: 0x25171f0
+19050537843: cap 1: End par conjunct: 0x2517190
+19050537969: cap 1: End par conjunction: 0x2517190
+19050538104: cap 1: End par conjunct: 0x2517130
+19050538234: cap 1: End par conjunction: 0x2517130
+19050538360: cap 1: End par conjunct: 0x25170d0
+19050538486: cap 1: End par conjunction: 0x25170d0
+19050538621: cap 1: End par conjunct: 0x2517070
+19050538752: cap 1: End par conjunction: 0x2517070
+19050538882: cap 1: End par conjunct: 0x2517010
+19050539004: cap 1: End par conjunction: 0x2517010
+19050539247: cap 1: End par conjunct: 0x2516fb0
+19050539521: cap 1: End par conjunction: 0x2516fb0
+19050539652: cap 1: End par conjunct: 0x2516f50
+19050539859: cap 1: End par conjunction: 0x2516f50
+19050539994: cap 1: End par conjunct: 0x2516ef0
+19050540120: cap 1: End par conjunction: 0x2516ef0
+19050540250: cap 1: End par conjunct: 0x2516e90
+19050540381: cap 1: End par conjunction: 0x2516e90
+19050540511: cap 1: End par conjunct: 0x2516e30
+19050540642: cap 1: End par conjunction: 0x2516e30
+19050540768: cap 1: End par conjunct: 0x2516dd0
+19050540903: cap 1: End par conjunction: 0x2516dd0
+19050541029: cap 1: End par conjunct: 0x2516d70
+19050541159: cap 1: End par conjunction: 0x2516d70
+19050541285: cap 1: End par conjunct: 0x2516d10
+19050541420: cap 1: End par conjunction: 0x2516d10
+19050541546: cap 1: End par conjunct: 0x2516cb0
+19050541672: cap 1: End par conjunction: 0x2516cb0
+19050541798: cap 1: End par conjunct: 0x2516c50
+19050541929: cap 1: End par conjunction: 0x2516c50
+19050542059: cap 1: End par conjunct: 0x2516bf0
+19050542185: cap 1: End par conjunction: 0x2516bf0
+19050542316: cap 1: End par conjunct: 0x2516b90
+19050542442: cap 1: End par conjunction: 0x2516b90
+19050542572: cap 1: End par conjunct: 0x2516b30
+19050542703: cap 1: End par conjunction: 0x2516b30
+19050542829: cap 1: End par conjunct: 0x2516ad0
+19050542955: cap 1: End par conjunction: 0x2516ad0
+19050543085: cap 1: End par conjunct: 0x2516a70
+19050543216: cap 1: End par conjunction: 0x2516a70
+19050543351: cap 1: End par conjunct: 0x2516a10
+19050543472: cap 1: End par conjunction: 0x2516a10
+19050543603: cap 1: End par conjunct: 0x25169b0
+19050543738: cap 1: End par conjunction: 0x25169b0
+19050543868: cap 1: End par conjunct: 0x2516950
+19050543994: cap 1: End par conjunction: 0x2516950
+19050544129: cap 1: End par conjunct: 0x25168f0
+19050544251: cap 1: End par conjunction: 0x25168f0
+19050544386: cap 1: End par conjunct: 0x2516890
+19050544516: cap 1: End par conjunction: 0x2516890
+19050544647: cap 1: End par conjunct: 0x2516830
+19050544777: cap 1: End par conjunction: 0x2516830
+19050544903: cap 1: End par conjunct: 0x25167d0
+19050545038: cap 1: End par conjunction: 0x25167d0
+19050545164: cap 1: End par conjunct: 0x2516770
+19050545295: cap 1: End par conjunction: 0x2516770
+19050545421: cap 1: End par conjunct: 0x2516710
+19050545556: cap 1: End par conjunction: 0x2516710
+19050545686: cap 1: End par conjunct: 0x25166b0
+19050545812: cap 1: End par conjunction: 0x25166b0
+19050545938: cap 1: End par conjunct: 0x2516650
+19050546069: cap 1: End par conjunction: 0x2516650
+19050546199: cap 1: End par conjunct: 0x25165f0
+19050546321: cap 1: End par conjunction: 0x25165f0
+19050546451: cap 1: End par conjunct: 0x2516590
+19050546577: cap 1: End par conjunction: 0x2516590
+19050546708: cap 1: End par conjunct: 0x2516530
+19050546838: cap 1: End par conjunction: 0x2516530
+19050546969: cap 1: End par conjunct: 0x25164d0
+19050547090: cap 1: End par conjunction: 0x25164d0
+19050547221: cap 1: End par conjunct: 0x2516470
+19050547356: cap 1: End par conjunction: 0x2516470
+19050547486: cap 1: End par conjunct: 0x2516410
+19050547612: cap 1: End par conjunction: 0x2516410
+19050547738: cap 1: End par conjunct: 0x25163b0
+19050547873: cap 1: End par conjunction: 0x25163b0
+19050548004: cap 1: End par conjunct: 0x2516350
+19050548130: cap 1: End par conjunction: 0x2516350
+19050548265: cap 1: End par conjunct: 0x25162f0
+19050548391: cap 1: End par conjunction: 0x25162f0
+19050548521: cap 1: End par conjunct: 0x2516290
+19050548652: cap 1: End par conjunction: 0x2516290
+19050548787: cap 1: End par conjunct: 0x2516230
+19050548917: cap 1: End par conjunction: 0x2516230
+19050549043: cap 1: End par conjunct: 0x25161d0
+19050549178: cap 1: End par conjunction: 0x25161d0
+19050549313: cap 1: End par conjunct: 0x2516170
+19050549439: cap 1: End par conjunction: 0x2516170
+19050549570: cap 1: End par conjunct: 0x2516110
+19050549705: cap 1: End par conjunction: 0x2516110
+19050549840: cap 1: End par conjunct: 0x25160b0
+19050550074: cap 1: End par conjunction: 0x25160b0
+19050550200: cap 1: End par conjunct: 0x2516050
+19050550326: cap 1: End par conjunction: 0x2516050
+19050550461: cap 1: End par conjunct: 0x2515ff0
+19050550699: cap 1: End par conjunction: 0x2515ff0
+19050550830: cap 1: End par conjunct: 0x2515f90
+19050550956: cap 1: End par conjunction: 0x2515f90
+19050551095: cap 1: End par conjunct: 0x2515f30
+19050551226: cap 1: End par conjunction: 0x2515f30
+19050551352: cap 1: End par conjunct: 0x2515ed0
+19050551478: cap 1: End par conjunction: 0x2515ed0
+19050551613: cap 1: End par conjunct: 0x2515e70
+19050551743: cap 1: End par conjunction: 0x2515e70
+19050551874: cap 1: End par conjunct: 0x2515e10
+19050552000: cap 1: End par conjunction: 0x2515e10
+19050552135: cap 1: End par conjunct: 0x2515db0
+19050552270: cap 1: End par conjunction: 0x2515db0
+19050552400: cap 1: End par conjunct: 0x2515d50
+19050552526: cap 1: End par conjunction: 0x2515d50
+19050552661: cap 1: End par conjunct: 0x2515cf0
+19050552787: cap 1: End par conjunction: 0x2515cf0
+19050552918: cap 1: End par conjunct: 0x2515c90
+19050553048: cap 1: End par conjunction: 0x2515c90
+19050553192: cap 1: End par conjunct: 0x2515c30
+19050553323: cap 1: End par conjunction: 0x2515c30
+19050553449: cap 1: End par conjunct: 0x2515bd0
+19050553584: cap 1: End par conjunction: 0x2515bd0
+19050553710: cap 1: End par conjunct: 0x2515b70
+19050553840: cap 1: End par conjunction: 0x2515b70
+19050553966: cap 1: End par conjunct: 0x2515b10
+19050554106: cap 1: End par conjunction: 0x2515b10
+19050554232: cap 1: End par conjunct: 0x2515ab0
+19050554358: cap 1: End par conjunction: 0x2515ab0
+19050554484: cap 1: End par conjunct: 0x2515a50
+19050554610: cap 1: End par conjunction: 0x2515a50
+19050554745: cap 1: End par conjunct: 0x25159f0
+19050554866: cap 1: End par conjunction: 0x25159f0
+19050554997: cap 1: End par conjunct: 0x2515990
+19050555123: cap 1: End par conjunction: 0x2515990
+19050555253: cap 1: End par conjunct: 0x2515930
+19050555384: cap 1: End par conjunction: 0x2515930
+19050555510: cap 1: End par conjunct: 0x25158d0
+19050555636: cap 1: End par conjunction: 0x25158d0
+19050555762: cap 1: End par conjunct: 0x2515870
+19050555897: cap 1: End par conjunction: 0x2515870
+19050556027: cap 1: End par conjunct: 0x2515810
+19050556153: cap 1: End par conjunction: 0x2515810
+19050556284: cap 1: End par conjunct: 0x25157b0
+19050556414: cap 1: End par conjunction: 0x25157b0
+19050556545: cap 1: End par conjunct: 0x2515750
+19050556671: cap 1: End par conjunction: 0x2515750
+19050556806: cap 1: End par conjunct: 0x25156f0
+19050556932: cap 1: End par conjunction: 0x25156f0
+19050557062: cap 1: End par conjunct: 0x2515690
+19050557193: cap 1: End par conjunction: 0x2515690
+19050557332: cap 1: End par conjunct: 0x2515630
+19050557458: cap 1: End par conjunction: 0x2515630
+19050557584: cap 1: End par conjunct: 0x25155d0
+19050557719: cap 1: End par conjunction: 0x25155d0
+19050557886: cap 1: End par conjunct: 0x2515570
+19050558016: cap 1: End par conjunction: 0x2515570
+19050558183: cap 1: End par conjunct: 0x2515510
+19050558318: cap 1: End par conjunction: 0x2515510
+19050558489: cap 1: End par conjunct: 0x25154b0
+19050558615: cap 1: End par conjunction: 0x25154b0
+19050558745: cap 1: End par conjunct: 0x2515450
+19050558876: cap 1: End par conjunction: 0x2515450
+19050559011: cap 1: End par conjunct: 0x25153f0
+19050559137: cap 1: End par conjunction: 0x25153f0
+19050559267: cap 1: End par conjunct: 0x2515390
+19050559393: cap 1: End par conjunction: 0x2515390
+19050559524: cap 1: End par conjunct: 0x2515330
+19050559650: cap 1: End par conjunction: 0x2515330
+19050559785: cap 1: End par conjunct: 0x25152d0
+19050559911: cap 1: End par conjunction: 0x25152d0
+19050560041: cap 1: End par conjunct: 0x2515270
+19050560176: cap 1: End par conjunction: 0x2515270
+19050560307: cap 1: End par conjunct: 0x2515210
+19050560433: cap 1: End par conjunction: 0x2515210
+19050560563: cap 1: End par conjunct: 0x25151b0
+19050560698: cap 1: End par conjunction: 0x25151b0
+19050560829: cap 1: End par conjunct: 0x2515150
+19050560959: cap 1: End par conjunction: 0x2515150
+19242613692: cap 1: stopping thread 1 (thread yielding)
+19242620163: cap 1: thread 1 is runnable
+19242629086: cap 1: Looking for global thread to resume
+19242629793: cap 1: Trying to steal a spark
+19242642051: cap 0: running thread 1
+19242646272: cap 0: stopping thread 1 (thread finished)
+19242695434: cap 2: Releasing thread 2 to the free pool
+19242695605: removed cap 1 from capset 0
+19242696145: cap 1: shutting down
+19242697063: removed cap 2 from capset 0
+19242697405: cap 2: shutting down
+19242699354: cap 3: Releasing thread 3 to the free pool
+19242701365: removed cap 3 from capset 0
+19242701919: cap 3: shutting down
+19242931954: removed cap 0 from capset 0
+19242932310: cap 0: shutting down
+19243048770: deleted capset 0
+
diff --git a/test/mdlLogMPI1.eventlog b/test/mdlLogMPI1.eventlog
deleted file mode 100644
Binary files a/test/mdlLogMPI1.eventlog and /dev/null differ
diff --git a/test/parallelTest.eventlog b/test/parallelTest.eventlog
new file mode 100644
Binary files /dev/null and b/test/parallelTest.eventlog differ
diff --git a/test/parallelTest.eventlog.reference b/test/parallelTest.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/parallelTest.eventlog.reference
@@ -0,0 +1,486 @@
+Event Types:
+0: Create thread (size 4)
+1: Run thread (size 4)
+2: Stop thread (size 10)
+3: Thread runnable (size 4)
+4: Migrate thread (size 6)
+8: Wakeup thread (size 6)
+9: Starting GC (size 0)
+10: Finished GC (size 0)
+11: Request sequential GC (size 0)
+12: Request parallel GC (size 0)
+15: Create spark thread (size 4)
+16: Log message (size variable)
+17: Create capabilities (size 2)
+18: Block marker (size 14)
+19: User message (size variable)
+20: GC idle (size 0)
+21: GC working (size 0)
+22: GC done (size 0)
+23: Version (size variable)
+24: Program invocation (size variable)
+25: Create capability set (size 6)
+26: Delete capability set (size 4)
+27: Add capability to capability set (size 6)
+28: Remove capability from capability set (size 6)
+29: RTS name and version (size variable)
+30: Program arguments (size variable)
+31: Program environment variables (size variable)
+32: Process ID (size 8)
+33: Parent process ID (size 8)
+34: Spark counters (size 56)
+35: Spark create (size 0)
+36: Spark dud (size 0)
+37: Spark overflow (size 0)
+38: Spark run (size 0)
+39: Spark steal (size 2)
+40: Spark fizzle (size 0)
+41: Spark GC (size 0)
+43: Wall clock time (size 16)
+44: Thread label (size variable)
+45: Create capability (size 2)
+46: Delete capability (size 2)
+47: Disable capability (size 2)
+48: Enable capability (size 2)
+49: Total heap mem ever allocated (size 12)
+50: Current heap size (size 12)
+51: Current heap live data (size 12)
+52: Heap static parameters (size 38)
+53: GC statistics (size 50)
+54: Synchronise stop-the-world GC (size 0)
+55: Task create (size 18)
+56: Task migrate (size 12)
+57: Task delete (size 8)
+58: User marker (size variable)
+59: Empty event for bug #9003 (size 0)
+60: Starting message receival (size 0)
+61: Finished message receival (size 0)
+62: Creating Process (size 4)
+63: Killing Process (size 4)
+64: Assigning thread to process (size 8)
+65: Creating machine (size 10)
+66: Killing machine (size 2)
+67: Sending message (size 19)
+68: Receiving message (size 23)
+69: Sending/Receiving local message (size 17)
+
+Events:
+965: creating machine 2 at 143714457434916300
+1016690453: startup: 1 capabilities
+1016695409: compiler version is 7.10.20150612
+1016698802: program invocation: /opt/Eden/test/./jost=ChainDep 2 3 +RTS -l -RTS
+1016705678: created capset 0 of type CapsetOsProcess
+1016705969: created capset 1 of type CapsetClockDomain
+1016707377: created cap 0
+1016707532: assigned cap 0 to capset 0
+1016707657: assigned cap 0 to capset 1
+1016711376: capset 1: wall clock time 1437144575s 365872000ns (unix epoch)
+1016714262: capset 0: pid 5847
+1016717224: capset 0: parent pid 5845
+1016723343: capset 0: RTS version "GHC-7.10.20150612 rts_l_pm"
+1016724280: capset 0: args: ["/opt/Eden/test/./jost=ChainDep","3","+RTS","-l","-RTS"]
+1016728194: capset 0: env: ["OMPI_MCA_orte_precondition_transports=4d4d233a0e00747c-c08b0d7505a2985d","PVM_RSH=/usr/bin/ssh","LS_COLORS=","PVM_ROOT=/usr/lib/pvm3","PVM_ARCH=LINUX64","PATH=/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/.cabal/bin","_=./ChainDep","PWD=/opt/Eden/test","SHLVL=1","PVM_EXPORT=DISPLAY","LESSOPEN=| /usr/bin/lesspipe %s","LESSCLOSE=/usr/bin/lesspipe %s %s","OMPI_MCA_orte_local_daemon_uri=1755316224.0;tcp://192.168.1.15:60361","OMPI_MCA_orte_hnp_uri=1755316224.0;tcp://192.168.1.15:60361","OMPI_MCA_mpi_yield_when_idle=0","OMPI_MCA_orte_app_num=0","OMPI_UNIVERSE_SIZE=1","OMPI_MCA_ess=env","OMPI_MCA_orte_ess_num_procs=2","OMPI_COMM_WORLD_SIZE=2","OMPI_COMM_WORLD_LOCAL_SIZE=2","OMPI_MCA_orte_ess_jobid=1755316225","OMPI_MCA_orte_ess_vpid=1","OMPI_COMM_WORLD_RANK=1","OMPI_COMM_WORLD_LOCAL_RANK=1","OMPI_MCA_opal_cr_is_tool=0","OPAL_OUTPUT_STDERR_FD=22"]
+1016844227: heap stats for heap capset 0: generations 2, 0 bytes max heap size, 524288 bytes alloc area size, 1048576 bytes mblock size, 4096 bytes block size
+1016949065: task 0x1c42f50 created on cap 0 with OS kernel thread 5847
+1020647546: cap 0: starting to receive
+1020647784: cap 0: receiving message with tag RFork at process 0, inport 0 from machine 1, process 1, thread 0 with size 19
+1020663383: cap 0: creating thread 1
+1020666580: creating process 1
+1020666681: cap 0: assigning thread 1 to process 1
+1020669258: cap 0: stop receiving
+1020670948: cap 0: running thread 1
+1020683435: newInport (1,1), blackhole 0x7f31e7e05480
+
+1020684432: connectTSO 1 to inport (1,1,2)
+
+1020708793: sending message with tag DataMes from process 1, thread 1 to machine 1, process 1 on inport 2
+1020710401: connectTSO 1 to inport (1,1,1)
+
+1020962248: sending message with tag Connect from process 1, thread 1 to machine 1, process 1 on inport 1
+1020975009: cap 0: stopping thread 1 (blocked on black hole owned by thread 23150672)
+1020993377: cap 0: starting to receive
+1020994887: cap 0: stop receiving
+1021163829: cap 0: starting to receive
+1021172134: cap 0: receiving message with tag Head at process 1, inport 1 from machine 1, process 1, thread 2 with size 3
+1021172996: cap 0: waking up thread 1 on cap 0
+1021174214: cap 0: stop receiving
+1021174870: cap 0: running thread 1
+1022012154: cap 0: stopping thread 1 (heap overflow)
+1022025732: cap 0: starting GC
+1022030836: cap 0: GC working
+1022048807: cap 0: GC idle
+1022049006: cap 0: GC done
+1022049708: cap 0: GC idle
+1022049746: cap 0: GC done
+1022052664: cap 0: all caps stopped for GC
+1022052988: cap 0: GC stats for heap capset 0: generation 0, 1480 bytes copied, 6712 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1022053665: cap 0: finished GC
+1022054054: cap 0: allocated on heap capset 0: 521488 total bytes till now
+1022054251: cap 0: size of heap capset 0: 1048576 bytes
+1022066437: cap 0: running thread 1
+1022575820: cap 0: stopping thread 1 (heap overflow)
+1022576987: cap 0: starting GC
+1022578110: cap 0: GC working
+1022586192: cap 0: GC idle
+1022586253: cap 0: GC done
+1022586485: cap 0: GC idle
+1022586523: cap 0: GC done
+1022587366: cap 0: all caps stopped for GC
+1022587476: cap 0: GC stats for heap capset 0: generation 0, 1456 bytes copied, 6744 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1022587977: cap 0: finished GC
+1022588072: cap 0: allocated on heap capset 0: 1045776 total bytes till now
+1022588192: cap 0: size of heap capset 0: 1048576 bytes
+1022595448: cap 0: starting to receive
+1022602936: cap 0: receiving message with tag Head at process 1, inport 1 from machine 1, process 1, thread 2 with size 3
+1022609437: cap 0: receiving message with tag Head at process 1, inport 1 from machine 1, process 1, thread 2 with size 3
+1022613717: cap 0: receiving message with tag DataMes at process 1, inport 1 from machine 1, process 1, thread 2 with size 2
+1022614602: cap 0: stop receiving
+1022614857: cap 0: running thread 1
+1023116425: cap 0: stopping thread 1 (heap overflow)
+1023117800: cap 0: starting GC
+1023118851: cap 0: GC working
+1023124706: cap 0: GC idle
+1023124774: cap 0: GC done
+1023125008: cap 0: GC idle
+1023125046: cap 0: GC done
+1023125927: cap 0: all caps stopped for GC
+1023126023: cap 0: GC stats for heap capset 0: generation 0, 472 bytes copied, 6600 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1023126483: cap 0: finished GC
+1023126593: cap 0: allocated on heap capset 0: 1566080 total bytes till now
+1023126699: cap 0: size of heap capset 0: 1048576 bytes
+1023128987: cap 0: running thread 1
+1023633921: cap 0: stopping thread 1 (heap overflow)
+1023634943: cap 0: starting GC
+1023635776: cap 0: GC working
+1023637901: cap 0: GC idle
+1023637951: cap 0: GC done
+1023638120: cap 0: GC idle
+1023638155: cap 0: GC done
+1023638882: cap 0: all caps stopped for GC
+1023638997: cap 0: GC stats for heap capset 0: generation 0, 280 bytes copied, 6520 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1023639342: cap 0: finished GC
+1023639418: cap 0: allocated on heap capset 0: 2090368 total bytes till now
+1023639494: cap 0: size of heap capset 0: 1048576 bytes
+1023641473: cap 0: running thread 1
+1024152336: cap 0: stopping thread 1 (heap overflow)
+1024153886: cap 0: starting GC
+1024154864: cap 0: GC working
+1024156939: cap 0: GC idle
+1024156990: cap 0: GC done
+1024157152: cap 0: GC idle
+1024157190: cap 0: GC done
+1024157995: cap 0: all caps stopped for GC
+1024158092: cap 0: GC stats for heap capset 0: generation 0, 136 bytes copied, 6664 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1024158481: cap 0: finished GC
+1024158576: cap 0: allocated on heap capset 0: 2614656 total bytes till now
+1024158663: cap 0: size of heap capset 0: 1048576 bytes
+1024161612: cap 0: running thread 1
+1024464591: sending message with tag Head from process 1, thread 1 to machine 1, process 1 on inport 1
+1024852218: cap 0: stopping thread 1 (heap overflow)
+1024854903: cap 0: starting GC
+1024857481: cap 0: GC working
+1024862179: cap 0: GC idle
+1024862248: cap 0: GC done
+1024862554: cap 0: GC idle
+1024862592: cap 0: GC done
+1024864137: cap 0: all caps stopped for GC
+1024864234: cap 0: GC stats for heap capset 0: generation 0, 560 bytes copied, 6232 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1024864706: cap 0: finished GC
+1024864813: cap 0: allocated on heap capset 0: 3138904 total bytes till now
+1024864896: cap 0: size of heap capset 0: 1048576 bytes
+1024869616: cap 0: running thread 1
+1025413849: cap 0: stopping thread 1 (heap overflow)
+1025419839: cap 0: starting GC
+1025423868: cap 0: GC working
+1025434468: cap 0: GC idle
+1025434719: cap 0: GC done
+1025435429: cap 0: GC idle
+1025435464: cap 0: GC done
+1025438379: cap 0: all caps stopped for GC
+1025438777: cap 0: GC stats for heap capset 0: generation 0, 480 bytes copied, 6232 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1025439537: cap 0: finished GC
+1025439779: cap 0: allocated on heap capset 0: 3663192 total bytes till now
+1025440120: cap 0: size of heap capset 0: 1048576 bytes
+1025452968: cap 0: running thread 1
+1025986039: cap 0: stopping thread 1 (heap overflow)
+1025989762: cap 0: starting GC
+1025992473: cap 0: GC working
+1025997294: cap 0: GC idle
+1025997478: cap 0: GC done
+1025997720: cap 0: GC idle
+1025997758: cap 0: GC done
+1025999740: cap 0: all caps stopped for GC
+1025999955: cap 0: GC stats for heap capset 0: generation 0, 360 bytes copied, 6280 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1026000391: cap 0: finished GC
+1026000526: cap 0: allocated on heap capset 0: 4187480 total bytes till now
+1026000731: cap 0: size of heap capset 0: 1048576 bytes
+1026005493: cap 0: running thread 1
+1026513329: cap 0: stopping thread 1 (heap overflow)
+1026514156: cap 0: starting GC
+1026514839: cap 0: GC working
+1026517258: cap 0: GC idle
+1026517307: cap 0: GC done
+1026517436: cap 0: GC idle
+1026517475: cap 0: GC done
+1026518137: cap 0: all caps stopped for GC
+1026518269: cap 0: GC stats for heap capset 0: generation 0, 392 bytes copied, 6248 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1026518711: cap 0: finished GC
+1026518810: cap 0: allocated on heap capset 0: 4711768 total bytes till now
+1026518879: cap 0: size of heap capset 0: 1048576 bytes
+1026520905: cap 0: running thread 1
+1026931676: cap 0: stopping thread 1 (thread yielding)
+1026933719: cap 0: running thread 1
+1027040442: cap 0: stopping thread 1 (heap overflow)
+1027041487: cap 0: starting GC
+1027042520: cap 0: GC working
+1027044626: cap 0: GC idle
+1027044691: cap 0: GC done
+1027044855: cap 0: GC idle
+1027044893: cap 0: GC done
+1027045602: cap 0: all caps stopped for GC
+1027045688: cap 0: GC stats for heap capset 0: generation 0, 248 bytes copied, 6216 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1027046008: cap 0: finished GC
+1027046103: cap 0: allocated on heap capset 0: 5236056 total bytes till now
+1027046178: cap 0: size of heap capset 0: 1048576 bytes
+1027047842: cap 0: running thread 1
+1027483007: sending message with tag Head from process 1, thread 1 to machine 1, process 1 on inport 1
+1027763758: cap 0: stopping thread 1 (heap overflow)
+1027769019: cap 0: starting GC
+1027773245: cap 0: GC working
+1027781276: cap 0: GC idle
+1027781516: cap 0: GC done
+1027782027: cap 0: GC idle
+1027782066: cap 0: GC done
+1027784390: cap 0: all caps stopped for GC
+1027784681: cap 0: GC stats for heap capset 0: generation 0, 512 bytes copied, 5944 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1027785214: cap 0: finished GC
+1027785374: cap 0: allocated on heap capset 0: 5760320 total bytes till now
+1027785678: cap 0: size of heap capset 0: 1048576 bytes
+1027796652: cap 0: running thread 1
+1028333218: cap 0: stopping thread 1 (heap overflow)
+1028335233: cap 0: starting GC
+1028336726: cap 0: GC working
+1028340251: cap 0: GC idle
+1028340304: cap 0: GC done
+1028340475: cap 0: GC idle
+1028340513: cap 0: GC done
+1028341397: cap 0: all caps stopped for GC
+1028341525: cap 0: GC stats for heap capset 0: generation 0, 512 bytes copied, 5864 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1028341944: cap 0: finished GC
+1028342058: cap 0: allocated on heap capset 0: 6284608 total bytes till now
+1028342308: cap 0: size of heap capset 0: 1048576 bytes
+1028350725: cap 0: starting to receive
+1028350956: cap 0: receiving message with tag RFork at process 0, inport 0 from machine 1, process 1, thread 0 with size 25
+1028358936: cap 0: creating thread 2
+1028359404: creating process 2
+1028359479: cap 0: assigning thread 2 to process 2
+1028360778: cap 0: stop receiving
+1028360951: cap 0: running thread 1
+1028864269: cap 0: stopping thread 1 (heap overflow)
+1028865693: cap 0: starting GC
+1028866580: cap 0: GC working
+1028870748: cap 0: GC idle
+1028870809: cap 0: GC done
+1028871018: cap 0: GC idle
+1028871056: cap 0: GC done
+1028871958: cap 0: all caps stopped for GC
+1028872081: cap 0: GC stats for heap capset 0: generation 0, 1592 bytes copied, 4720 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1028872522: cap 0: finished GC
+1028872634: cap 0: allocated on heap capset 0: 6806008 total bytes till now
+1028872709: cap 0: size of heap capset 0: 1048576 bytes
+1028874869: cap 0: running thread 1
+1029415791: cap 0: stopping thread 1 (heap overflow)
+1029417389: cap 0: starting GC
+1029418482: cap 0: GC working
+1029421856: cap 0: GC idle
+1029421921: cap 0: GC done
+1029422125: cap 0: GC idle
+1029422160: cap 0: GC done
+1029423011: cap 0: all caps stopped for GC
+1029423108: cap 0: GC stats for heap capset 0: generation 0, 1616 bytes copied, 4688 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1029423490: cap 0: finished GC
+1029423582: cap 0: allocated on heap capset 0: 7330296 total bytes till now
+1029423662: cap 0: size of heap capset 0: 1048576 bytes
+1029426498: cap 0: running thread 1
+1029932465: cap 0: stopping thread 1 (heap overflow)
+1029933669: cap 0: starting GC
+1029934360: cap 0: GC working
+1029936519: cap 0: GC idle
+1029936578: cap 0: GC done
+1029936734: cap 0: GC idle
+1029936769: cap 0: GC done
+1029937451: cap 0: all caps stopped for GC
+1029937521: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4688 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1029937840: cap 0: finished GC
+1029937912: cap 0: allocated on heap capset 0: 7854584 total bytes till now
+1029937990: cap 0: size of heap capset 0: 1048576 bytes
+1029940102: cap 0: running thread 1
+1030446353: cap 0: stopping thread 1 (heap overflow)
+1030447423: cap 0: starting GC
+1030448338: cap 0: GC working
+1030451144: cap 0: GC idle
+1030451207: cap 0: GC done
+1030451353: cap 0: GC idle
+1030451391: cap 0: GC done
+1030452094: cap 0: all caps stopped for GC
+1030452173: cap 0: GC stats for heap capset 0: generation 0, 512 bytes copied, 4424 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1030452510: cap 0: finished GC
+1030452575: cap 0: allocated on heap capset 0: 8378872 total bytes till now
+1030452655: cap 0: size of heap capset 0: 1048576 bytes
+1030454804: cap 0: running thread 1
+1030959861: cap 0: stopping thread 1 (heap overflow)
+1030960823: cap 0: starting GC
+1030961580: cap 0: GC working
+1030964127: cap 0: GC idle
+1030964190: cap 0: GC done
+1030964326: cap 0: GC idle
+1030964361: cap 0: GC done
+1030965010: cap 0: all caps stopped for GC
+1030965088: cap 0: GC stats for heap capset 0: generation 0, 304 bytes copied, 4424 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1030965388: cap 0: finished GC
+1030965451: cap 0: allocated on heap capset 0: 8903160 total bytes till now
+1030965534: cap 0: size of heap capset 0: 1048576 bytes
+1030967635: cap 0: running thread 1
+1031473544: cap 0: stopping thread 1 (heap overflow)
+1031474484: cap 0: starting GC
+1031475231: cap 0: GC working
+1031477254: cap 0: GC idle
+1031477319: cap 0: GC done
+1031477452: cap 0: GC idle
+1031477486: cap 0: GC done
+1031478125: cap 0: all caps stopped for GC
+1031478197: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4376 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1031478483: cap 0: finished GC
+1031478547: cap 0: allocated on heap capset 0: 9427448 total bytes till now
+1031478625: cap 0: size of heap capset 0: 1048576 bytes
+1031480638: cap 0: running thread 1
+1031985699: cap 0: stopping thread 1 (heap overflow)
+1031986577: cap 0: starting GC
+1031987317: cap 0: GC working
+1031989096: cap 0: GC idle
+1031989161: cap 0: GC done
+1031989311: cap 0: GC idle
+1031989346: cap 0: GC done
+1031989979: cap 0: all caps stopped for GC
+1031990053: cap 0: GC stats for heap capset 0: generation 0, 216 bytes copied, 4376 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1031990336: cap 0: finished GC
+1031990414: cap 0: allocated on heap capset 0: 9951736 total bytes till now
+1031990487: cap 0: size of heap capset 0: 1048576 bytes
+1031992533: cap 0: running thread 1
+1032497771: cap 0: stopping thread 1 (heap overflow)
+1032498682: cap 0: starting GC
+1032499444: cap 0: GC working
+1032501257: cap 0: GC idle
+1032501318: cap 0: GC done
+1032501467: cap 0: GC idle
+1032501504: cap 0: GC done
+1032502155: cap 0: all caps stopped for GC
+1032502226: cap 0: GC stats for heap capset 0: generation 0, 280 bytes copied, 4312 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1032502511: cap 0: finished GC
+1032502576: cap 0: allocated on heap capset 0: 10476024 total bytes till now
+1032502651: cap 0: size of heap capset 0: 1048576 bytes
+1032504831: cap 0: running thread 1
+1033009500: cap 0: stopping thread 1 (heap overflow)
+1033010352: cap 0: starting GC
+1033011123: cap 0: GC working
+1033012730: cap 0: GC idle
+1033012795: cap 0: GC done
+1033012948: cap 0: GC idle
+1033012986: cap 0: GC done
+1033013636: cap 0: all caps stopped for GC
+1033013692: cap 0: GC stats for heap capset 0: generation 0, 104 bytes copied, 4456 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1033013968: cap 0: finished GC
+1033014042: cap 0: allocated on heap capset 0: 11000312 total bytes till now
+1033014118: cap 0: size of heap capset 0: 1048576 bytes
+1033016153: cap 0: running thread 1
+1033526211: cap 0: stopping thread 1 (heap overflow)
+1033527354: cap 0: starting GC
+1033528248: cap 0: GC working
+1033530168: cap 0: GC idle
+1033530231: cap 0: GC done
+1033530379: cap 0: GC idle
+1033530413: cap 0: GC done
+1033531144: cap 0: all caps stopped for GC
+1033531265: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4328 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1033531601: cap 0: finished GC
+1033531682: cap 0: allocated on heap capset 0: 11524600 total bytes till now
+1033531756: cap 0: size of heap capset 0: 1048576 bytes
+1033533890: cap 0: running thread 1
+1034038618: cap 0: stopping thread 1 (heap overflow)
+1034039555: cap 0: starting GC
+1034040289: cap 0: GC working
+1034042130: cap 0: GC idle
+1034042192: cap 0: GC done
+1034042316: cap 0: GC idle
+1034042354: cap 0: GC done
+1034042958: cap 0: all caps stopped for GC
+1034043017: cap 0: GC stats for heap capset 0: generation 0, 200 bytes copied, 4328 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1034043283: cap 0: finished GC
+1034043353: cap 0: allocated on heap capset 0: 12048888 total bytes till now
+1034043413: cap 0: size of heap capset 0: 1048576 bytes
+1034045429: cap 0: running thread 1
+1034550158: cap 0: stopping thread 1 (heap overflow)
+1034551080: cap 0: starting GC
+1034551812: cap 0: GC working
+1034553684: cap 0: GC idle
+1034553747: cap 0: GC done
+1034553877: cap 0: GC idle
+1034553916: cap 0: GC done
+1034554536: cap 0: all caps stopped for GC
+1034554595: cap 0: GC stats for heap capset 0: generation 0, 232 bytes copied, 4296 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1034554874: cap 0: finished GC
+1034554955: cap 0: allocated on heap capset 0: 12573176 total bytes till now
+1034555014: cap 0: size of heap capset 0: 1048576 bytes
+1034557010: cap 0: running thread 1
+1034856882: sending message with tag Head from process 1, thread 1 to machine 1, process 1 on inport 1
+1035138473: sending message with tag DataMes from process 1, thread 1 to machine 1, process 1 on inport 1
+1035141040: cap 0: stopping thread 1 (thread finished)
+1035144862: killing process 1
+1035157481: cap 0: running thread 2
+1035171358: newInport (2,2), blackhole 0x7f31e7e20000
+
+1035172381: connectTSO 2 to inport (1,1,7)
+
+1035368512: sending message with tag DataMes from process 2, thread 2 to machine 1, process 1 on inport 7
+1035370635: connectTSO 2 to inport (1,1,6)
+
+1035646908: sending message with tag Connect from process 2, thread 2 to machine 1, process 1 on inport 6
+1035651909: cap 0: stopping thread 2 (blocked on black hole owned by thread 23150672)
+1035668968: cap 0: starting to receive
+1035670418: cap 0: stop receiving
+1035832495: cap 0: starting to receive
+1035837859: cap 0: receiving message with tag DataMes at process 2, inport 2 from machine 1, process 1, thread 5 with size 2
+1035838974: cap 0: waking up thread 2 on cap 0
+1035839922: cap 0: stop receiving
+1035840505: cap 0: running thread 2
+1036013700: sending message with tag Head from process 2, thread 2 to machine 1, process 1 on inport 6
+1036199479: sending message with tag DataMes from process 2, thread 2 to machine 1, process 1 on inport 6
+1036200951: cap 0: stopping thread 2 (thread finished)
+1036203085: killing process 2
+1036673875: cap 0: starting to receive
+1036674075: cap 0: stop receiving
+1036676344: cap 0: starting GC
+1036678097: cap 0: GC working
+1036682705: cap 0: GC idle
+1036682824: cap 0: GC done
+1036682989: cap 0: GC idle
+1036683028: cap 0: GC done
+1036683991: cap 0: all caps stopped for GC
+1036684170: cap 0: GC stats for heap capset 0: generation 0, 112 bytes copied, 4376 bytes slop, 495616 bytes fragmentation, 1 par threads, 0 bytes max par copied, 0 bytes total par copied
+1036684509: cap 0: finished GC
+1036684762: cap 0: allocated on heap capset 0: 12687120 total bytes till now
+1036684892: cap 0: size of heap capset 0: 1048576 bytes
+1036685495: task 0x1c42f50 deleted
+1036686412: task 0x1c42f50 created on cap 0 with OS kernel thread 5847
+1036686852: cap 0: creating thread 3
+1036691152: cap 0: running thread 3
+1036691224: cap 0: stopping thread 3 (thread finished)
+1036691527: task 0x1c42f50 deleted
+1036708176: cap 0: allocated on heap capset 0: 12688144 total bytes till now
+1036708997: removed cap 0 from capset 0
+1036709083: removed cap 0 from capset 1
+1036709178: deleted cap 0
+1036709275: deleted capset 0
+1036709334: deleted capset 1
+1036715687: killing machine 2
+
diff --git a/test/pre77stop.eventlog.reference b/test/pre77stop.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/pre77stop.eventlog.reference
@@ -0,0 +1,139 @@
+Event Types:
+0: Create thread (size 4)
+1: Run thread (size 4)
+2: Stop thread (size 10)
+3: Thread runnable (size 4)
+4: Migrate thread (size 6)
+8: Wakeup thread (size 6)
+9: Starting GC (size 0)
+10: Finished GC (size 0)
+11: Request sequential GC (size 0)
+12: Request parallel GC (size 0)
+15: Create spark thread (size 4)
+16: Log message (size variable)
+17: Create capabilities (size 2)
+18: Block marker (size 14)
+19: User message (size variable)
+20: GC idle (size 0)
+21: GC working (size 0)
+22: GC done (size 0)
+23: Version (size variable)
+24: Program invocation (size variable)
+25: Create capability set (size 6)
+26: Delete capability set (size 4)
+27: Add capability to capability set (size 6)
+28: Remove capability from capability set (size 6)
+29: RTS name and version (size variable)
+30: Program arguments (size variable)
+31: Program environment variables (size variable)
+32: Process ID (size 8)
+33: Parent process ID (size 8)
+34: Spark counters (size 56)
+35: Spark create (size 0)
+36: Spark dud (size 0)
+37: Spark overflow (size 0)
+38: Spark run (size 0)
+39: Spark steal (size 2)
+40: Spark fizzle (size 0)
+41: Spark GC (size 0)
+43: Wall clock time (size 16)
+44: Thread label (size variable)
+45: Create capability (size 2)
+46: Delete capability (size 2)
+47: Disable capability (size 2)
+48: Enable capability (size 2)
+49: Total heap mem ever allocated (size 12)
+50: Current heap size (size 12)
+51: Current heap live data (size 12)
+52: Heap static parameters (size 38)
+53: GC statistics (size 50)
+54: Synchronise stop-the-world GC (size 0)
+60: Starting message receival (size 0)
+61: Finished message receival (size 0)
+62: Creating Process (size 4)
+63: Killing Process (size 4)
+64: Assigning thread to process (size 8)
+65: Creating machine (size 10)
+66: Killing machine (size 2)
+67: Sending message (size 19)
+68: Receiving message (size 23)
+69: Sending/Receiving local message (size 17)
+
+Events:
+289733: startup: 1 capabilities
+296334: created capset 0 of type CapsetOsProcess
+296685: created capset 1 of type CapsetClockDomain
+298459: created cap 0
+298614: assigned cap 0 to capset 0
+298750: assigned cap 0 to capset 1
+305355: capset 1: wall clock time 1405192564s 324769000ns (unix epoch)
+305796: capset 0: pid 19928
+308186: capset 0: parent pid 18797
+315568: capset 0: RTS version "GHC-7.6.3 rts_l"
+323642: capset 0: args: ["./wrongeventlog2","+RTS","-lsu-g-p","-K80m","-k10m","-H200m","-C1s"]
+331921: capset 0: env: ["SSH_AGENT_PID=1817","PVM_RSH=/usr/bin/ssh","GPG_AGENT_INFO=/tmp/keyring-yTUMmt/gpg:0:1","TERM=xterm","SHELL=/bin/bash","XDG_SESSION_COOKIE=acf1c79e0e2de67643be755c00000003-1405160974.283591-1531347675","WINDOWID=58743399","OLDPWD=/opt/Eden/edentv/fixFor783/BLD-ghc-events-parallel","GNOME_KEYRING_CONTROL=/tmp/keyring-yTUMmt","USER=jost","LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=00;36:*.au=00;36:*.flac=00;36:*.mid=00;36:*.midi=00;36:*.mka=00;36:*.mp3=00;36:*.mpc=00;36:*.ogg=00;36:*.ra=00;36:*.wav=00;36:*.axa=00;36:*.oga=00;36:*.spx=00;36:*.xspf=00;36:","XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session0","XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0","PVM_ROOT=/usr/lib/pvm3","SSH_AUTH_SOCK=/tmp/keyring-yTUMmt/ssh","SESSION_MANAGER=local/onAir:@/tmp/.ICE-unix/1781,unix/onAir:/tmp/.ICE-unix/1781","DEFAULTS_PATH=/usr/share/gconf/gnome-fallback.default.path","PVM_ARCH=LINUX64","XDG_CONFIG_DIRS=/etc/xdg/xdg-gnome-fallback:/etc/xdg","PATH=/home/jost/bin:/home/jost/bin:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/jost/.cabal/bin","DESKTOP_SESSION=gnome-fallback","PWD=/opt/Eden/edentv/fixFor783","GNOME_KEYRING_PID=1770","LANG=en_US.UTF-8","MANDATORY_PATH=/usr/share/gconf/gnome-fallback.mandatory.path","UBUNTU_MENUPROXY=libappmenu.so","GDMSESSION=gnome-fallback","SHLVL=1","HOME=/home/jost","LANGUAGE=en_US:en","GNOME_DESKTOP_SESSION_ID=this-is-deprecated","LOGNAME=jost","PVM_EXPORT=DISPLAY","XDG_DATA_DIRS=/usr/share/gnome-fallback:/usr/share/gnome:/usr/local/share/:/usr/share/","DBUS_SESSION_BUS_ADDRESS=unix:abstract=/tmp/dbus-Mviy2n6D5M,guid=3677210ad991dc7e0dc3a1ae00000012","LESSOPEN=| /usr/bin/lesspipe %s","DISPLAY=:0.0","XDG_CURRENT_DESKTOP=GNOME","LESSCLOSE=/usr/bin/lesspipe %s %s","COLORTERM=gnome-terminal","XAUTHORITY=/home/jost/.Xauthority","_=./wrongeventlog2"]
+716554: cap 0: creating thread 1
+724337: cap 0: running thread 1
+777249: cap 0: stopping thread 1 (heap overflow)
+4206233: cap 0: running thread 1
+4371098: cap 0: stopping thread 1 (making a foreign call)
+4373253: cap 0: running thread 1
+4468468: cap 0: forking child thread
+4628142: cap 0: creating thread 2
+4629931: cap 0: stopping thread 1 (thread yielding)
+4631259: cap 0: running thread 2
+4635338: cap 0: stopping thread 2 (heap overflow)
+5624512: cap 0: running thread 2
+5633862: cap 0: child
+10558539: cap 0: stopping thread 2 (thread yielding)
+10560195: cap 0: running thread 1
+10571646: cap 0: stopping thread 1 (blocked on black hole owned by thread 2)
+10571821: cap 0: running thread 2
+190091289: cap 0: stopping thread 2 (heap overflow)
+190645077: cap 0: running thread 2
+324320577: cap 0: stopping thread 2 (heap overflow)
+324792075: cap 0: running thread 2
+458588360: cap 0: stopping thread 2 (heap overflow)
+459042855: cap 0: running thread 2
+591946686: cap 0: stopping thread 2 (heap overflow)
+592423132: cap 0: running thread 2
+726292685: cap 0: stopping thread 2 (heap overflow)
+726799582: cap 0: running thread 2
+818131666: cap 0: waking up thread 1 on cap 0
+818148789: cap 0: stopping thread 2 (making a foreign call)
+818150627: cap 0: running thread 2
+818202281: cap 0: filling full MVar
+818204902: cap 0: stopping thread 2 (blocked on an MVar)
+818205910: cap 0: running thread 1
+818209409: cap 0: stopping thread 1 (making a foreign call)
+818209858: cap 0: running thread 1
+818221708: cap 0: emptying full MVar
+818222511: cap 0: waking up thread 2 on cap 0
+818227099: cap 0: stopping thread 1 (making a foreign call)
+818227497: cap 0: running thread 1
+818237552: cap 0: reading empty MVar
+818238643: cap 0: stopping thread 1 (blocked on an MVar)
+818238846: cap 0: running thread 2
+818239075: cap 0: stopping thread 2 (thread yielding)
+818239319: cap 0: running thread 2
+818241881: cap 0: filling empty MVar
+818242290: cap 0: waking up thread 1 on cap 0
+818242613: cap 0: stopping thread 2 (thread yielding)
+818242945: cap 0: running thread 1
+818246059: cap 0: stopping thread 1 (making a foreign call)
+818246364: cap 0: running thread 1
+818253828: cap 0: stopping thread 1 (thread finished)
+818334270: cap 0: creating thread 3
+818334992: cap 0: running thread 2
+818337572: cap 0: stopping thread 2 (heap overflow)
+818880973: cap 0: running thread 2
+818886482: cap 0: child finished
+818887085: cap 0: stopping thread 2 (thread finished)
+818887615: cap 0: running thread 3
+818895068: cap 0: stopping thread 3 (thread finished)
+819826584: removed cap 0 from capset 0
+819826743: removed cap 0 from capset 1
+819827023: deleted cap 0
+819827079: deleted capset 0
+819827133: deleted capset 1
+
diff --git a/test/queens-ghc-6.12.1.eventlog b/test/queens-ghc-6.12.1.eventlog
new file mode 100644
Binary files /dev/null and b/test/queens-ghc-6.12.1.eventlog differ
diff --git a/test/queens-ghc-6.12.1.eventlog.reference b/test/queens-ghc-6.12.1.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/queens-ghc-6.12.1.eventlog.reference
@@ -0,0 +1,509 @@
+Event Types:
+0: Create thread (size 8)
+1: Run thread (size 8)
+2: Stop thread (size 10)
+3: Thread runnable (size 8)
+4: Migrate thread (size 10)
+5: Run spark (size 8)
+6: Steal spark (size 10)
+7: Shutdown (size 0)
+8: Wakeup thread (size 10)
+9: Starting GC (size 0)
+10: Finished GC (size 0)
+11: Request sequential GC (size 0)
+12: Request parallel GC (size 0)
+15: Create spark thread (size 8)
+16: Log message (size variable)
+17: Startup (size 0)
+18: Block marker (size 14)
+19: User message (size variable)
+
+Events:
+106000: startup: 4 capabilities
+431000: cap 3: creating thread 1
+431000: cap 3: thread 1 is runnable
+432000: cap 3: running thread 1
+471000: cap 3: creating thread 2
+471000: cap 3: thread 2 is runnable
+471000: cap 3: stopping thread 1 (thread finished)
+478000: cap 3: creating thread 3
+479000: cap 3: thread 3 is runnable
+517000: cap 3: running thread 2
+580000: cap 3: stopping thread 2 (making a foreign call)
+585000: cap 3: running thread 2
+606000: cap 3: stopping thread 2 (making a foreign call)
+612000: cap 3: running thread 3
+667000: cap 3: stopping thread 3 (thread yielding)
+668000: cap 3: thread 3 is runnable
+668000: cap 3: running thread 3
+834000: cap 3: stopping thread 3 (stack overflow)
+839000: cap 3: running thread 3
+1459000: cap 3: stopping thread 3 (heap overflow)
+1460000: cap 3: requesting parallel GC
+1470000: cap 0: starting GC
+1473000: cap 1: starting GC
+1473000: cap 2: starting GC
+1474000: cap 3: starting GC
+1631000: cap 3: finished GC
+1632000: cap 0: finished GC
+1632000: cap 1: finished GC
+1632000: cap 2: finished GC
+1633000: cap 3: running thread 3
+1637000: cap 2: creating thread 4
+1637000: cap 2: creating spark thread 4
+1637000: cap 2: thread 4 is runnable
+1637000: cap 2: running thread 4
+1638000: cap 0: creating thread 5
+1638000: cap 0: creating spark thread 5
+1638000: cap 3: stopping thread 3 (thread yielding)
+1638000: cap 3: thread 3 is runnable
+1639000: cap 0: thread 5 is runnable
+1639000: cap 0: running thread 5
+1639000: cap 1: creating thread 6
+1639000: cap 1: creating spark thread 6
+1639000: cap 1: thread 6 is runnable
+1639000: cap 3: running thread 3
+1640000: cap 1: running thread 6
+1642000: cap 2: stealing a spark from cap 3
+1647000: cap 0: stealing a spark from cap 3
+1647000: cap 1: stealing a spark from cap 3
+1652000: cap 2: stopping thread 4 (thread yielding)
+1653000: cap 2: thread 4 is runnable
+1653000: cap 2: running thread 4
+1663000: cap 0: stopping thread 5 (thread yielding)
+1663000: cap 1: stopping thread 6 (thread yielding)
+1664000: cap 0: thread 5 is runnable
+1664000: cap 0: running thread 5
+1664000: cap 1: thread 6 is runnable
+1664000: cap 1: running thread 6
+1672000: cap 2: stopping thread 4 (stack overflow)
+1676000: cap 2: running thread 4
+1684000: cap 0: stopping thread 5 (stack overflow)
+1687000: cap 1: stopping thread 6 (stack overflow)
+1688000: cap 0: running thread 5
+1691000: cap 1: running thread 6
+1974000: cap 3: stopping thread 3 (heap overflow)
+1974000: cap 3: requesting parallel GC
+1975000: cap 1: stopping thread 6 (thread yielding)
+1975000: cap 1: thread 6 is runnable
+1975000: cap 2: stopping thread 4 (thread yielding)
+1976000: cap 1: starting GC
+1976000: cap 2: thread 4 is runnable
+1976000: cap 2: starting GC
+1977000: cap 0: stopping thread 5 (thread yielding)
+1977000: cap 0: thread 5 is runnable
+1977000: cap 0: starting GC
+1978000: cap 3: starting GC
+2054000: cap 3: finished GC
+2055000: cap 0: finished GC
+2055000: cap 1: finished GC
+2055000: cap 2: finished GC
+2056000: cap 0: running thread 5
+2056000: cap 1: running thread 6
+2056000: cap 2: running thread 4
+2056000: cap 3: running thread 3
+2066000: cap 0: stopping thread 5 (thread yielding)
+2066000: cap 0: thread 5 is runnable
+2066000: cap 1: stopping thread 6 (thread yielding)
+2066000: cap 2: stopping thread 4 (thread yielding)
+2066000: cap 2: thread 4 is runnable
+2066000: cap 3: stopping thread 3 (thread yielding)
+2066000: cap 3: thread 3 is runnable
+2067000: cap 0: running thread 5
+2067000: cap 1: thread 6 is runnable
+2067000: cap 1: running thread 6
+2067000: cap 2: running thread 4
+2067000: cap 3: running thread 3
+2413000: cap 3: stopping thread 3 (heap overflow)
+2414000: cap 3: requesting parallel GC
+2417000: cap 0: stopping thread 5 (thread yielding)
+2417000: cap 0: thread 5 is runnable
+2417000: cap 0: starting GC
+2417000: cap 1: stopping thread 6 (thread yielding)
+2417000: cap 1: thread 6 is runnable
+2417000: cap 1: starting GC
+2417000: cap 2: stopping thread 4 (thread yielding)
+2418000: cap 2: thread 4 is runnable
+2418000: cap 2: starting GC
+2419000: cap 3: starting GC
+2457000: cap 3: finished GC
+2458000: cap 0: finished GC
+2458000: cap 0: running thread 5
+2458000: cap 1: finished GC
+2458000: cap 2: finished GC
+2458000: cap 3: running thread 3
+2459000: cap 1: running thread 6
+2459000: cap 2: running thread 4
+2462000: cap 0: stopping thread 5 (thread yielding)
+2462000: cap 0: thread 5 is runnable
+2462000: cap 2: stopping thread 4 (thread yielding)
+2463000: cap 0: running thread 5
+2463000: cap 1: stopping thread 6 (thread yielding)
+2463000: cap 2: thread 4 is runnable
+2463000: cap 2: running thread 4
+2463000: cap 3: stopping thread 3 (thread yielding)
+2463000: cap 3: thread 3 is runnable
+2463000: cap 3: running thread 3
+2464000: cap 1: thread 6 is runnable
+2464000: cap 1: running thread 6
+2573000: cap 3: stopping thread 3 (thread blocked)
+2612000: cap 3: creating thread 7
+2612000: cap 3: creating spark thread 7
+2612000: cap 3: thread 7 is runnable
+2613000: cap 3: running thread 7
+2616000: cap 3: running a local spark
+2629000: cap 3: stopping thread 7 (stack overflow)
+2630000: cap 3: running thread 7
+2845000: cap 3: stopping thread 7 (heap overflow)
+2846000: cap 3: requesting parallel GC
+2848000: cap 1: stopping thread 6 (thread yielding)
+2848000: cap 1: thread 6 is runnable
+2848000: cap 2: stopping thread 4 (thread yielding)
+2848000: cap 2: thread 4 is runnable
+2849000: cap 0: stopping thread 5 (thread yielding)
+2849000: cap 1: starting GC
+2849000: cap 2: starting GC
+2850000: cap 0: thread 5 is runnable
+2850000: cap 0: starting GC
+2851000: cap 3: starting GC
+2890000: cap 0: finished GC
+2890000: cap 1: finished GC
+2890000: cap 3: finished GC
+2891000: cap 0: running thread 5
+2891000: cap 1: running thread 6
+2891000: cap 2: finished GC
+2891000: cap 2: running thread 4
+2891000: cap 3: running thread 7
+2894000: cap 3: stopping thread 7 (thread yielding)
+2895000: cap 0: stopping thread 5 (thread yielding)
+2895000: cap 1: stopping thread 6 (thread yielding)
+2895000: cap 2: stopping thread 4 (thread yielding)
+2895000: cap 3: thread 7 is runnable
+2895000: cap 3: running thread 7
+2896000: cap 0: thread 5 is runnable
+2896000: cap 0: running thread 5
+2896000: cap 1: thread 6 is runnable
+2896000: cap 1: running thread 6
+2896000: cap 2: thread 4 is runnable
+2896000: cap 2: running thread 4
+3231000: cap 3: stopping thread 7 (heap overflow)
+3231000: cap 3: requesting parallel GC
+3232000: cap 2: stopping thread 4 (thread yielding)
+3232000: cap 2: thread 4 is runnable
+3232000: cap 2: starting GC
+3233000: cap 0: stopping thread 5 (thread yielding)
+3233000: cap 0: thread 5 is runnable
+3233000: cap 0: starting GC
+3233000: cap 1: stopping thread 6 (thread yielding)
+3233000: cap 1: thread 6 is runnable
+3233000: cap 1: starting GC
+3234000: cap 3: starting GC
+3268000: cap 3: finished GC
+3269000: cap 0: finished GC
+3269000: cap 0: running thread 5
+3269000: cap 1: finished GC
+3269000: cap 1: running thread 6
+3269000: cap 2: finished GC
+3269000: cap 3: running thread 7
+3270000: cap 2: running thread 4
+3273000: cap 0: stopping thread 5 (thread yielding)
+3274000: cap 0: thread 5 is runnable
+3274000: cap 0: running thread 5
+3274000: cap 2: stopping thread 4 (thread yielding)
+3274000: cap 2: thread 4 is runnable
+3274000: cap 3: stopping thread 7 (thread yielding)
+3274000: cap 3: thread 7 is runnable
+3275000: cap 1: stopping thread 6 (thread yielding)
+3275000: cap 1: thread 6 is runnable
+3275000: cap 1: running thread 6
+3275000: cap 2: running thread 4
+3275000: cap 3: running thread 7
+3507000: cap 2: stealing a spark from cap 3
+3524000: cap 0: stealing a spark from cap 2
+3540000: cap 1: stealing a spark from cap 0
+3607000: cap 3: stopping thread 7 (heap overflow)
+3607000: cap 3: requesting parallel GC
+3609000: cap 0: stopping thread 5 (thread yielding)
+3609000: cap 0: thread 5 is runnable
+3609000: cap 0: starting GC
+3609000: cap 1: stopping thread 6 (thread yielding)
+3609000: cap 1: thread 6 is runnable
+3609000: cap 1: starting GC
+3609000: cap 2: stopping thread 4 (thread yielding)
+3609000: cap 2: thread 4 is runnable
+3610000: cap 2: starting GC
+3610000: cap 3: thread 3 is runnable
+3610000: cap 3: waking up thread 3 on cap 3
+3611000: cap 3: starting GC
+3642000: cap 3: finished GC
+3643000: cap 0: finished GC
+3643000: cap 0: running thread 5
+3643000: cap 1: finished GC
+3643000: cap 2: finished GC
+3643000: cap 2: running thread 4
+3644000: cap 1: running thread 6
+3644000: cap 3: running thread 7
+3647000: cap 0: stopping thread 5 (thread yielding)
+3647000: cap 2: stopping thread 4 (thread yielding)
+3647000: cap 2: thread 4 is runnable
+3648000: cap 0: thread 5 is runnable
+3648000: cap 0: running thread 5
+3648000: cap 1: stopping thread 6 (thread yielding)
+3648000: cap 1: thread 6 is runnable
+3648000: cap 1: running thread 6
+3648000: cap 2: running thread 4
+3648000: cap 3: stopping thread 7 (thread yielding)
+3648000: cap 3: thread 7 is runnable
+3662000: cap 3: running thread 3
+3666000: cap 3: stopping thread 3 (thread blocked)
+3668000: cap 3: running thread 7
+3684000: cap 1: stealing a spark from cap 2
+3692000: cap 0: stealing a spark from cap 1
+3729000: cap 2: stopping thread 4 (thread blocked)
+3730000: cap 2: creating thread 8
+3730000: cap 2: creating spark thread 8
+3731000: cap 2: thread 8 is runnable
+3731000: cap 2: running thread 8
+3731000: cap 2: running a local spark
+3770000: cap 0: stealing a spark from cap 1
+3810000: cap 1: stopping thread 6 (thread blocked)
+3812000: cap 1: creating thread 9
+3813000: cap 1: creating spark thread 9
+3813000: cap 1: thread 9 is runnable
+3813000: cap 1: running thread 9
+3814000: cap 1: stealing a spark from cap 2
+3865000: cap 0: stealing a spark from cap 1
+3883000: cap 1: stopping thread 9 (thread blocked)
+3884000: cap 1: thread 6 is runnable
+3884000: cap 1: waking up thread 6 on cap 1
+3884000: cap 1: running thread 6
+3885000: cap 1: stopping thread 6 (thread yielding)
+3885000: cap 1: thread 6 is runnable
+3885000: cap 1: running thread 6
+3886000: cap 1: running a local spark
+3955000: cap 0: stealing a spark from cap 1
+3985000: cap 2: stopping thread 8 (heap overflow)
+3986000: cap 2: requesting parallel GC
+3987000: cap 0: stopping thread 5 (heap overflow)
+3987000: cap 0: thread 5 is runnable
+3987000: cap 0: starting GC
+3987000: cap 1: stealing a spark from cap 3
+3988000: cap 1: stopping thread 6 (thread yielding)
+3988000: cap 1: thread 6 is runnable
+3988000: cap 1: starting GC
+3988000: cap 3: stopping thread 7 (thread yielding)
+3988000: cap 3: thread 7 is runnable
+3988000: cap 3: starting GC
+3989000: cap 2: waking up thread 9 on cap 1
+3990000: cap 2: thread 4 is runnable
+3990000: cap 2: waking up thread 4 on cap 2
+3990000: cap 2: starting GC
+4032000: cap 0: finished GC
+4032000: cap 2: finished GC
+4033000: cap 0: running thread 5
+4033000: cap 1: finished GC
+4033000: cap 1: running thread 6
+4033000: cap 2: running thread 8
+4033000: cap 3: finished GC
+4033000: cap 3: running thread 7
+4037000: cap 0: stopping thread 5 (thread yielding)
+4037000: cap 0: thread 5 is runnable
+4037000: cap 0: running thread 5
+4037000: cap 3: stopping thread 7 (thread yielding)
+4037000: cap 3: thread 7 is runnable
+4037000: cap 3: running thread 7
+4038000: cap 1: stopping thread 6 (thread yielding)
+4038000: cap 1: thread 6 is runnable
+4038000: cap 1: running thread 6
+4038000: cap 2: stopping thread 8 (thread yielding)
+4038000: cap 2: thread 8 is runnable
+4038000: cap 2: running thread 4
+4041000: cap 2: stopping thread 4 (thread blocked)
+4041000: cap 2: running thread 8
+4053000: cap 2: stealing a spark from cap 1
+4064000: cap 0: stealing a spark from cap 1
+4102000: cap 3: running a local spark
+4296000: cap 0: stealing a spark from cap 1
+4308000: cap 2: stealing a spark from cap 0
+4312000: cap 1: stopping thread 6 (thread blocked)
+4313000: cap 1: running thread 9
+4314000: cap 1: running a local spark
+4375000: cap 2: stopping thread 8 (heap overflow)
+4375000: cap 2: requesting parallel GC
+4376000: cap 0: stopping thread 5 (heap overflow)
+4376000: cap 0: thread 5 is runnable
+4376000: cap 0: starting GC
+4376000: cap 3: stopping thread 7 (thread yielding)
+4377000: cap 3: thread 7 is runnable
+4377000: cap 3: starting GC
+4378000: cap 1: stopping thread 9 (thread yielding)
+4379000: cap 1: thread 9 is runnable
+4379000: cap 1: starting GC
+4380000: cap 2: thread 4 is runnable
+4380000: cap 2: waking up thread 4 on cap 2
+4380000: cap 2: waking up thread 3 on cap 3
+4380000: cap 2: starting GC
+4419000: cap 2: finished GC
+4420000: cap 0: finished GC
+4420000: cap 1: finished GC
+4420000: cap 3: finished GC
+4421000: cap 0: running thread 5
+4421000: cap 1: running thread 9
+4421000: cap 2: running thread 8
+4421000: cap 3: running thread 7
+4424000: cap 0: stopping thread 5 (thread yielding)
+4424000: cap 0: thread 5 is runnable
+4424000: cap 3: stopping thread 7 (thread yielding)
+4424000: cap 3: thread 7 is runnable
+4425000: cap 0: running thread 5
+4425000: cap 2: stopping thread 8 (thread yielding)
+4425000: cap 2: thread 8 is runnable
+4425000: cap 2: running thread 4
+4425000: cap 3: running thread 7
+4426000: cap 1: stopping thread 9 (thread yielding)
+4426000: cap 1: thread 9 is runnable
+4426000: cap 1: running thread 9
+4428000: cap 2: stopping thread 4 (thread finished)
+4428000: cap 2: running thread 8
+4440000: cap 2: stealing a spark from cap 0
+4466000: cap 0: stopping thread 5 (thread blocked)
+4467000: cap 0: creating thread 10
+4468000: cap 0: creating spark thread 10
+4468000: cap 0: thread 10 is runnable
+4468000: cap 0: running thread 10
+4468000: cap 0: running a local spark
+4497000: cap 2: stealing a spark from cap 1
+4512000: cap 0: stealing a spark from cap 3
+4515000: cap 3: stopping thread 7 (thread blocked)
+4527000: cap 3: running thread 3
+4529000: cap 3: stopping thread 3 (thread blocked)
+4532000: cap 3: waking up thread 5 on cap 0
+4532000: cap 3: creating thread 11
+4532000: cap 3: creating spark thread 11
+4533000: cap 3: thread 11 is runnable
+4533000: cap 3: running thread 11
+4534000: cap 0: stopping thread 10 (thread yielding)
+4534000: cap 0: thread 10 is runnable
+4534000: cap 3: running a local spark
+4535000: cap 0: running thread 10
+4547000: cap 1: stopping thread 9 (thread blocked)
+4549000: cap 1: creating thread 12
+4549000: cap 1: creating spark thread 12
+4549000: cap 1: thread 12 is runnable
+4549000: cap 1: running thread 12
+4550000: cap 1: stealing a spark from cap 0
+4562000: cap 2: stealing a spark from cap 0
+4595000: cap 2: stealing a spark from cap 3
+4600000: cap 0: stopping thread 10 (thread blocked)
+4600000: cap 0: running thread 5
+4601000: cap 0: stealing a spark from cap 2
+4608000: cap 1: stealing a spark from cap 2
+4625000: cap 2: stopping thread 8 (thread blocked)
+4626000: cap 2: waking up thread 10 on cap 0
+4627000: cap 2: waking up thread 9 on cap 1
+4627000: cap 2: waking up thread 6 on cap 1
+4628000: cap 0: stopping thread 5 (thread yielding)
+4628000: cap 0: thread 5 is runnable
+4628000: cap 2: creating thread 13
+4628000: cap 2: creating spark thread 13
+4628000: cap 2: thread 13 is runnable
+4629000: cap 0: running thread 5
+4629000: cap 1: stopping thread 12 (thread yielding)
+4629000: cap 1: thread 12 is runnable
+4629000: cap 1: running thread 12
+4629000: cap 2: running thread 13
+4629000: cap 2: running a local spark
+4665000: cap 1: stopping thread 12 (thread finished)
+4665000: cap 1: running thread 9
+4666000: cap 1: stopping thread 9 (thread finished)
+4666000: cap 1: running thread 6
+4668000: cap 1: stealing a spark from cap 3
+4669000: cap 0: stopping thread 5 (thread finished)
+4669000: cap 0: running thread 10
+4670000: cap 0: stopping thread 10 (thread finished)
+4671000: cap 0: waking up thread 8 on cap 2
+4672000: cap 0: waking up thread 3 on cap 3
+4672000: cap 0: waking up thread 7 on cap 3
+4672000: cap 0: creating thread 14
+4673000: cap 0: creating spark thread 14
+4673000: cap 0: thread 14 is runnable
+4673000: cap 0: running thread 14
+4673000: cap 0: stealing a spark from cap 1
+4673000: cap 3: stopping thread 11 (thread yielding)
+4673000: cap 3: thread 11 is runnable
+4674000: cap 2: stopping thread 13 (thread yielding)
+4674000: cap 2: thread 13 is runnable
+4674000: cap 3: running thread 11
+4675000: cap 1: stopping thread 6 (thread blocked)
+4675000: cap 1: creating thread 15
+4675000: cap 2: running thread 13
+4676000: cap 1: creating spark thread 15
+4676000: cap 1: thread 15 is runnable
+4676000: cap 1: running thread 15
+4676000: cap 1: running a local spark
+4685000: cap 2: stopping thread 13 (thread finished)
+4686000: cap 2: running thread 8
+4687000: cap 2: stealing a spark from cap 1
+4707000: cap 1: running a local spark
+4711000: cap 3: stopping thread 11 (thread finished)
+4719000: cap 0: stopping thread 14 (thread finished)
+4719000: cap 0: waking up thread 6 on cap 1
+4721000: cap 1: stopping thread 15 (thread yielding)
+4721000: cap 1: thread 15 is runnable
+4721000: cap 3: running thread 3
+4722000: cap 0: thread 6 is runnable
+4722000: cap 1: migrating thread 6 to cap 0
+4724000: cap 3: stopping thread 3 (thread blocked)
+4725000: cap 1: running thread 15
+4726000: cap 3: running thread 7
+4728000: cap 0: running thread 6
+4728000: cap 2: stopping thread 8 (thread finished)
+4732000: cap 3: stopping thread 7 (thread blocked)
+4734000: cap 0: stopping thread 6 (thread blocked)
+4778000: cap 1: stopping thread 15 (heap overflow)
+4779000: cap 1: requesting parallel GC
+4784000: cap 0: starting GC
+4790000: cap 2: starting GC
+4793000: cap 3: starting GC
+4794000: cap 1: starting GC
+4833000: cap 1: finished GC
+4834000: cap 0: finished GC
+4834000: cap 1: running thread 15
+4834000: cap 2: finished GC
+4834000: cap 3: finished GC
+4838000: cap 1: stopping thread 15 (thread yielding)
+4838000: cap 1: thread 15 is runnable
+4839000: cap 1: running thread 15
+4846000: cap 0: thread 6 is runnable
+4846000: cap 1: stopping thread 15 (thread finished)
+4849000: cap 1: waking up thread 6 on cap 0
+4851000: cap 0: running thread 6
+4852000: cap 0: stopping thread 6 (thread finished)
+4853000: cap 3: thread 7 is runnable
+4857000: cap 0: waking up thread 7 on cap 3
+4859000: cap 3: running thread 7
+4861000: cap 3: stopping thread 7 (thread finished)
+4861000: cap 3: thread 3 is runnable
+4861000: cap 3: waking up thread 3 on cap 3
+4866000: cap 3: running thread 3
+4903000: cap 3: stopping thread 3 (making a foreign call)
+4904000: cap 3: running thread 3
+4905000: cap 3: stopping thread 3 (making a foreign call)
+4914000: cap 3: running thread 3
+4918000: cap 3: stopping thread 3 (thread yielding)
+4918000: cap 3: thread 3 is runnable
+4919000: cap 3: running thread 3
+4946000: cap 3: stopping thread 3 (thread finished)
+4962000: cap 3: running thread 2
+4964000: cap 0: requesting sequential GC
+4965000: cap 3: stopping thread 2 (thread yielding)
+4966000: cap 3: thread 2 is runnable
+4972000: cap 0: starting GC
+5026000: cap 0: finished GC
+5037000: cap 3: running thread 2
+5037000: cap 3: stopping thread 2 (thread finished)
+5053000: cap 0: shutting down
+5054000: cap 1: shutting down
+5104000: cap 2: shutting down
+5105000: cap 3: shutting down
+
diff --git a/test/queens-ghc-7.0.2.eventlog b/test/queens-ghc-7.0.2.eventlog
new file mode 100644
Binary files /dev/null and b/test/queens-ghc-7.0.2.eventlog differ
diff --git a/test/queens-ghc-7.0.2.eventlog.reference b/test/queens-ghc-7.0.2.eventlog.reference
new file mode 100644
--- /dev/null
+++ b/test/queens-ghc-7.0.2.eventlog.reference
@@ -0,0 +1,943 @@
+Event Types:
+0: Create thread (size 4)
+1: Run thread (size 4)
+2: Stop thread (size 6)
+3: Thread runnable (size 4)
+4: Migrate thread (size 6)
+5: Run spark (size 4)
+6: Steal spark (size 6)
+7: Shutdown (size 0)
+8: Wakeup thread (size 6)
+9: Starting GC (size 0)
+10: Finished GC (size 0)
+11: Request sequential GC (size 0)
+12: Request parallel GC (size 0)
+15: Create spark thread (size 4)
+16: Log message (size variable)
+17: Startup (size 2)
+18: Block marker (size 14)
+19: User message (size variable)
+20: GC idle (size 0)
+21: GC working (size 0)
+22: GC done (size 0)
+
+Events:
+115000: startup: 4 capabilities
+430000: cap 3: creating thread 1
+430000: cap 3: thread 1 is runnable
+433000: cap 3: running thread 1
+512000: cap 3: stopping thread 1 (making a foreign call)
+513000: cap 3: running thread 1
+516000: cap 3: stopping thread 1 (making a foreign call)
+517000: cap 3: running thread 1
+554000: cap 3: creating thread 2
+554000: cap 3: thread 2 is runnable
+572000: cap 3: stopping thread 1 (thread finished)
+580000: cap 3: creating thread 3
+580000: cap 3: thread 3 is runnable
+619000: cap 3: running thread 2
+635000: cap 3: stopping thread 2 (thread yielding)
+635000: cap 3: thread 2 is runnable
+637000: cap 0: thread 2 is runnable
+637000: cap 3: migrating thread 2 to cap 0
+648000: cap 0: running thread 2
+655000: cap 3: running thread 3
+672000: cap 0: stopping thread 2 (making a foreign call)
+893000: cap 3: stopping thread 3 (stack overflow)
+897000: cap 3: running thread 3
+1466000: cap 3: stopping thread 3 (heap overflow)
+1467000: cap 3: requesting parallel GC
+1476000: cap 0: starting GC
+1480000: cap 1: starting GC
+1481000: cap 2: starting GC
+1483000: cap 3: starting GC
+1503000: cap 1: GC working
+1503000: cap 2: GC working
+1506000: cap 2: GC idle
+1507000: cap 1: GC idle
+1509000: cap 0: GC working
+1514000: cap 3: GC working
+1566000: cap 0: GC idle
+1628000: cap 0: GC done
+1628000: cap 1: GC done
+1628000: cap 3: GC idle
+1628000: cap 3: GC done
+1629000: cap 2: GC done
+1629000: cap 3: GC working
+1630000: cap 3: GC idle
+1630000: cap 3: GC done
+1630000: cap 3: GC working
+1631000: cap 3: GC idle
+1631000: cap 3: GC done
+1631000: cap 3: GC working
+1631000: cap 3: GC idle
+1632000: cap 3: GC done
+1653000: cap 0: finished GC
+1653000: cap 3: finished GC
+1654000: cap 1: finished GC
+1654000: cap 2: finished GC
+1654000: cap 3: running thread 3
+1658000: cap 3: stopping thread 3 (thread yielding)
+1659000: cap 2: creating thread 4
+1659000: cap 2: creating spark thread 4
+1659000: cap 3: thread 3 is runnable
+1659000: cap 3: running thread 3
+1660000: cap 0: creating thread 5
+1660000: cap 0: creating spark thread 5
+1660000: cap 0: thread 5 is runnable
+1660000: cap 2: thread 4 is runnable
+1660000: cap 2: running thread 4
+1661000: cap 0: running thread 5
+1663000: cap 1: creating thread 6
+1663000: cap 1: creating spark thread 6
+1663000: cap 1: thread 6 is runnable
+1664000: cap 1: running thread 6
+1665000: cap 2: stealing a spark from cap 3
+1667000: cap 0: stealing a spark from cap 3
+1669000: cap 1: stealing a spark from cap 3
+1675000: cap 2: stopping thread 4 (thread yielding)
+1675000: cap 2: thread 4 is runnable
+1676000: cap 2: running thread 4
+1681000: cap 0: stopping thread 5 (thread yielding)
+1681000: cap 0: thread 5 is runnable
+1681000: cap 0: running thread 5
+1681000: cap 1: stopping thread 6 (thread yielding)
+1681000: cap 1: thread 6 is runnable
+1681000: cap 1: running thread 6
+1692000: cap 2: stopping thread 4 (stack overflow)
+1694000: cap 2: running thread 4
+1699000: cap 0: stopping thread 5 (stack overflow)
+1700000: cap 1: stopping thread 6 (stack overflow)
+1705000: cap 0: running thread 5
+1705000: cap 1: running thread 6
+1949000: cap 3: stopping thread 3 (heap overflow)
+1950000: cap 3: requesting parallel GC
+1951000: cap 0: stopping thread 5 (thread yielding)
+1951000: cap 0: thread 5 is runnable
+1951000: cap 0: starting GC
+1951000: cap 1: stopping thread 6 (thread yielding)
+1951000: cap 1: thread 6 is runnable
+1951000: cap 1: starting GC
+1951000: cap 2: stopping thread 4 (thread yielding)
+1951000: cap 2: thread 4 is runnable
+1952000: cap 2: starting GC
+1953000: cap 3: starting GC
+1962000: cap 1: GC working
+1963000: cap 2: GC working
+1964000: cap 0: GC working
+1969000: cap 3: GC working
+1990000: cap 2: GC idle
+1991000: cap 0: GC idle
+1992000: cap 1: GC idle
+1999000: cap 0: GC done
+1999000: cap 1: GC done
+1999000: cap 2: GC done
+1999000: cap 3: GC idle
+1999000: cap 3: GC done
+2000000: cap 3: GC working
+2000000: cap 3: GC idle
+2000000: cap 3: GC done
+2000000: cap 3: GC working
+2001000: cap 3: GC idle
+2001000: cap 3: GC done
+2002000: cap 3: GC working
+2002000: cap 3: GC idle
+2002000: cap 3: GC done
+2013000: cap 3: finished GC
+2014000: cap 0: finished GC
+2014000: cap 0: running thread 5
+2014000: cap 1: finished GC
+2014000: cap 2: finished GC
+2014000: cap 3: running thread 3
+2015000: cap 1: running thread 6
+2015000: cap 2: running thread 4
+2017000: cap 0: stopping thread 5 (thread yielding)
+2018000: cap 0: thread 5 is runnable
+2018000: cap 0: running thread 5
+2018000: cap 2: stopping thread 4 (thread yielding)
+2018000: cap 2: thread 4 is runnable
+2019000: cap 1: stopping thread 6 (thread yielding)
+2019000: cap 1: thread 6 is runnable
+2019000: cap 2: running thread 4
+2019000: cap 3: stopping thread 3 (thread yielding)
+2019000: cap 3: thread 3 is runnable
+2019000: cap 3: running thread 3
+2020000: cap 1: running thread 6
+2307000: cap 3: stopping thread 3 (heap overflow)
+2307000: cap 3: requesting parallel GC
+2308000: cap 1: stopping thread 6 (thread yielding)
+2309000: cap 1: thread 6 is runnable
+2309000: cap 1: starting GC
+2310000: cap 0: stopping thread 5 (thread yielding)
+2310000: cap 2: stopping thread 4 (thread yielding)
+2310000: cap 2: thread 4 is runnable
+2310000: cap 2: starting GC
+2311000: cap 0: thread 5 is runnable
+2311000: cap 0: starting GC
+2311000: cap 3: starting GC
+2319000: cap 1: GC working
+2320000: cap 2: GC working
+2323000: cap 0: GC working
+2327000: cap 3: GC working
+2333000: cap 2: GC idle
+2334000: cap 0: GC idle
+2335000: cap 3: GC idle
+2336000: cap 0: GC done
+2336000: cap 1: GC idle
+2336000: cap 1: GC done
+2336000: cap 2: GC done
+2336000: cap 3: GC done
+2337000: cap 3: GC working
+2337000: cap 3: GC idle
+2337000: cap 3: GC done
+2337000: cap 3: GC working
+2337000: cap 3: GC idle
+2337000: cap 3: GC done
+2338000: cap 3: GC working
+2338000: cap 3: GC idle
+2338000: cap 3: GC done
+2351000: cap 3: finished GC
+2352000: cap 0: finished GC
+2352000: cap 0: running thread 5
+2352000: cap 1: finished GC
+2352000: cap 2: finished GC
+2353000: cap 1: running thread 6
+2353000: cap 2: running thread 4
+2353000: cap 3: running thread 3
+2356000: cap 0: stopping thread 5 (thread yielding)
+2356000: cap 0: thread 5 is runnable
+2356000: cap 1: stopping thread 6 (thread yielding)
+2356000: cap 1: thread 6 is runnable
+2356000: cap 2: stopping thread 4 (thread yielding)
+2356000: cap 2: thread 4 is runnable
+2357000: cap 0: running thread 5
+2357000: cap 1: running thread 6
+2357000: cap 2: running thread 4
+2357000: cap 3: stopping thread 3 (thread yielding)
+2357000: cap 3: thread 3 is runnable
+2357000: cap 3: running thread 3
+2451000: cap 2: stopping thread 4 (thread yielding)
+2451000: cap 2: thread 4 is runnable
+2452000: cap 3: stopping thread 3 (thread blocked)
+2452000: cap 3: creating thread 7
+2453000: cap 2: running thread 4
+2453000: cap 3: creating spark thread 7
+2453000: cap 3: thread 7 is runnable
+2463000: cap 3: running thread 7
+2465000: cap 3: running a local spark
+2480000: cap 3: stopping thread 7 (stack overflow)
+2481000: cap 3: running thread 7
+2749000: cap 2: stopping thread 4 (heap overflow)
+2750000: cap 2: requesting parallel GC
+2751000: cap 1: stopping thread 6 (thread yielding)
+2751000: cap 3: stopping thread 7 (thread yielding)
+2752000: cap 1: thread 6 is runnable
+2752000: cap 1: starting GC
+2752000: cap 3: thread 7 is runnable
+2752000: cap 3: starting GC
+6061000: cap 0: stopping thread 5 (thread yielding)
+6062000: cap 0: thread 5 is runnable
+6062000: cap 0: starting GC
+6063000: cap 2: starting GC
+6074000: cap 1: GC working
+6075000: cap 0: GC working
+6075000: cap 2: GC working
+6076000: cap 3: GC working
+6079000: cap 2: GC idle
+6082000: cap 1: GC idle
+6084000: cap 0: GC idle
+6090000: cap 0: GC done
+6090000: cap 1: GC done
+6090000: cap 2: GC done
+6090000: cap 3: GC idle
+6090000: cap 3: GC done
+6091000: cap 2: GC working
+6091000: cap 2: GC idle
+6091000: cap 2: GC done
+6091000: cap 2: GC working
+6091000: cap 2: GC idle
+6091000: cap 2: GC done
+6092000: cap 2: GC working
+6092000: cap 2: GC idle
+6092000: cap 2: GC done
+6107000: cap 0: finished GC
+6107000: cap 2: finished GC
+6108000: cap 0: running thread 5
+6108000: cap 1: finished GC
+6108000: cap 1: running thread 6
+6108000: cap 2: running thread 4
+6108000: cap 3: finished GC
+6109000: cap 3: running thread 7
+6113000: cap 1: stopping thread 6 (thread yielding)
+6113000: cap 1: thread 6 is runnable
+6114000: cap 1: running thread 6
+6114000: cap 2: stopping thread 4 (thread yielding)
+6115000: cap 0: stopping thread 5 (thread yielding)
+6115000: cap 2: thread 4 is runnable
+6115000: cap 2: running thread 4
+6115000: cap 3: stopping thread 7 (thread yielding)
+6115000: cap 3: thread 7 is runnable
+6116000: cap 0: thread 5 is runnable
+6116000: cap 0: running thread 5
+6116000: cap 3: running thread 7
+6403000: cap 2: stopping thread 4 (heap overflow)
+6403000: cap 2: requesting parallel GC
+6404000: cap 0: stopping thread 5 (thread yielding)
+6404000: cap 0: thread 5 is runnable
+6404000: cap 1: stopping thread 6 (heap overflow)
+6404000: cap 1: thread 6 is runnable
+6404000: cap 3: stopping thread 7 (thread yielding)
+6405000: cap 0: starting GC
+6405000: cap 1: starting GC
+6405000: cap 3: thread 7 is runnable
+6405000: cap 3: starting GC
+6406000: cap 2: starting GC
+6414000: cap 3: GC working
+6415000: cap 0: GC working
+6415000: cap 1: GC working
+6417000: cap 2: GC working
+6420000: cap 1: GC idle
+6421000: cap 0: GC idle
+6422000: cap 2: GC idle
+6425000: cap 0: GC done
+6425000: cap 1: GC done
+6425000: cap 2: GC done
+6425000: cap 3: GC idle
+6425000: cap 3: GC done
+6426000: cap 2: GC working
+6426000: cap 2: GC idle
+6426000: cap 2: GC done
+6426000: cap 2: GC working
+6426000: cap 2: GC idle
+6427000: cap 2: GC done
+6427000: cap 2: GC working
+6427000: cap 2: GC idle
+6427000: cap 2: GC done
+6440000: cap 0: finished GC
+6440000: cap 2: finished GC
+6441000: cap 0: running thread 5
+6441000: cap 1: finished GC
+6441000: cap 1: running thread 6
+6441000: cap 2: running thread 4
+6441000: cap 3: finished GC
+6442000: cap 3: running thread 7
+6445000: cap 0: stopping thread 5 (thread yielding)
+6445000: cap 0: thread 5 is runnable
+6445000: cap 1: stopping thread 6 (thread yielding)
+6445000: cap 3: stopping thread 7 (thread yielding)
+6445000: cap 3: thread 7 is runnable
+6445000: cap 3: running thread 7
+6446000: cap 0: running thread 5
+6446000: cap 1: thread 6 is runnable
+6446000: cap 1: running thread 6
+6446000: cap 2: stopping thread 4 (thread yielding)
+6446000: cap 2: thread 4 is runnable
+6446000: cap 2: running thread 4
+6648000: cap 1: stealing a spark from cap 0
+6653000: cap 0: stopping thread 5 (thread blocked)
+6653000: cap 0: creating thread 8
+6653000: cap 1: stopping thread 6 (thread yielding)
+6653000: cap 1: thread 6 is runnable
+6654000: cap 0: creating spark thread 8
+6654000: cap 0: thread 8 is runnable
+6654000: cap 0: running thread 8
+6655000: cap 0: running a local spark
+6655000: cap 1: running thread 6
+6656000: cap 2: waking up thread 3 on cap 3
+6658000: cap 2: stealing a spark from cap 1
+6658000: cap 3: stopping thread 7 (thread yielding)
+6658000: cap 3: thread 7 is runnable
+6659000: cap 3: waking up thread 3 on cap 3
+6659000: cap 3: thread 3 is runnable
+6660000: cap 3: running thread 7
+6727000: cap 2: stopping thread 4 (heap overflow)
+6728000: cap 1: stopping thread 6 (thread yielding)
+6728000: cap 2: requesting parallel GC
+6729000: cap 0: stopping thread 8 (thread yielding)
+6729000: cap 0: thread 8 is runnable
+6729000: cap 0: starting GC
+6729000: cap 1: thread 6 is runnable
+6729000: cap 1: starting GC
+6729000: cap 3: stopping thread 7 (thread yielding)
+6729000: cap 3: thread 7 is runnable
+6730000: cap 2: starting GC
+6730000: cap 3: starting GC
+6737000: cap 0: GC working
+6737000: cap 2: GC working
+6738000: cap 1: GC working
+6739000: cap 3: GC working
+6741000: cap 2: GC idle
+6744000: cap 1: GC idle
+6747000: cap 3: GC idle
+6748000: cap 0: GC idle
+6748000: cap 1: GC done
+6748000: cap 2: GC done
+6749000: cap 0: GC done
+6749000: cap 2: GC working
+6749000: cap 2: GC idle
+6749000: cap 2: GC done
+6749000: cap 3: GC done
+6750000: cap 2: GC working
+6750000: cap 2: GC idle
+6750000: cap 2: GC done
+6750000: cap 2: GC working
+6750000: cap 2: GC idle
+6750000: cap 2: GC done
+6764000: cap 0: finished GC
+6764000: cap 0: running thread 8
+6764000: cap 1: finished GC
+6764000: cap 2: finished GC
+6765000: cap 1: running thread 6
+6765000: cap 2: running thread 4
+6765000: cap 3: finished GC
+6768000: cap 1: stopping thread 6 (thread yielding)
+6769000: cap 0: stopping thread 8 (thread yielding)
+6769000: cap 0: thread 8 is runnable
+6769000: cap 1: thread 6 is runnable
+6769000: cap 1: running thread 6
+6769000: cap 2: stopping thread 4 (thread yielding)
+6769000: cap 2: thread 4 is runnable
+6770000: cap 2: running thread 4
+6777000: cap 3: running thread 3
+6780000: cap 3: stopping thread 3 (thread blocked)
+6782000: cap 1: stopping thread 6 (thread blocked)
+6782000: cap 2: stopping thread 4 (thread yielding)
+6782000: cap 2: thread 4 is runnable
+6784000: cap 1: creating thread 9
+6784000: cap 1: creating spark thread 9
+6784000: cap 2: running thread 4
+6785000: cap 1: thread 9 is runnable
+6785000: cap 1: running thread 9
+6786000: cap 1: stealing a spark from cap 0
+6790000: cap 3: running thread 7
+6791000: cap 0: running thread 8
+6794000: cap 3: stopping thread 7 (thread yielding)
+6794000: cap 3: thread 7 is runnable
+6795000: cap 0: stopping thread 8 (thread yielding)
+6795000: cap 0: thread 8 is runnable
+6795000: cap 3: running thread 7
+6796000: cap 0: running thread 8
+6802000: cap 2: waking up thread 6 on cap 1
+6803000: cap 2: stealing a spark from cap 0
+6804000: cap 1: stopping thread 9 (thread yielding)
+6804000: cap 1: thread 9 is runnable
+6805000: cap 1: waking up thread 6 on cap 1
+6805000: cap 1: thread 6 is runnable
+6805000: cap 1: running thread 9
+6818000: cap 1: stopping thread 9 (thread finished)
+6819000: cap 1: running thread 6
+6819000: cap 1: waking up thread 5 on cap 0
+6820000: cap 0: stopping thread 8 (thread yielding)
+6820000: cap 1: stealing a spark from cap 3
+6821000: cap 0: thread 8 is runnable
+6821000: cap 0: waking up thread 5 on cap 0
+6821000: cap 0: thread 5 is runnable
+6821000: cap 0: running thread 8
+6828000: cap 0: stopping thread 8 (thread blocked)
+6828000: cap 0: running thread 5
+6828000: cap 2: stopping thread 4 (thread yielding)
+6829000: cap 2: thread 4 is runnable
+6829000: cap 2: running thread 4
+6830000: cap 0: stopping thread 5 (thread blocked)
+6831000: cap 0: creating thread 10
+6831000: cap 0: creating spark thread 10
+6831000: cap 0: thread 10 is runnable
+6831000: cap 0: running thread 10
+6832000: cap 0: stealing a spark from cap 1
+6857000: cap 2: waking up thread 8 on cap 0
+6857000: cap 2: stealing a spark from cap 0
+6858000: cap 0: stopping thread 10 (thread yielding)
+6858000: cap 0: thread 10 is runnable
+6858000: cap 0: waking up thread 8 on cap 0
+6859000: cap 0: thread 8 is runnable
+6859000: cap 0: running thread 10
+6940000: cap 0: stopping thread 10 (thread blocked)
+6940000: cap 0: running thread 8
+6940000: cap 2: stopping thread 4 (thread yielding)
+6941000: cap 0: waking up thread 5 on cap 0
+6941000: cap 0: thread 5 is runnable
+6941000: cap 0: stopping thread 8 (thread finished)
+6941000: cap 0: running thread 5
+6941000: cap 2: thread 4 is runnable
+6941000: cap 2: running thread 4
+6942000: cap 0: waking up thread 3 on cap 3
+6942000: cap 0: stealing a spark from cap 1
+6943000: cap 3: stopping thread 7 (thread yielding)
+6943000: cap 3: thread 7 is runnable
+6944000: cap 2: waking up thread 10 on cap 0
+6944000: cap 3: waking up thread 3 on cap 3
+6944000: cap 3: thread 3 is runnable
+6944000: cap 3: running thread 7
+6945000: cap 0: stopping thread 5 (thread yielding)
+6945000: cap 0: thread 5 is runnable
+6945000: cap 2: stealing a spark from cap 0
+6946000: cap 0: waking up thread 10 on cap 0
+6946000: cap 0: thread 10 is runnable
+6946000: cap 0: running thread 5
+6949000: cap 0: stopping thread 5 (thread blocked)
+6949000: cap 0: running thread 10
+6950000: cap 0: running a local spark
+6950000: cap 2: stopping thread 4 (thread yielding)
+6950000: cap 2: thread 4 is runnable
+6950000: cap 2: running thread 4
+6974000: cap 0: stopping thread 10 (thread yielding)
+6974000: cap 1: stopping thread 6 (thread blocked)
+6975000: cap 0: thread 10 is runnable
+6975000: cap 0: running thread 10
+6975000: cap 1: creating thread 11
+6975000: cap 1: creating spark thread 11
+6976000: cap 1: thread 11 is runnable
+6976000: cap 1: running thread 11
+6977000: cap 1: running a local spark
+7019000: cap 0: running a local spark
+7046000: cap 2: waking up thread 5 on cap 0
+7047000: cap 0: stopping thread 10 (thread yielding)
+7047000: cap 0: thread 10 is runnable
+7047000: cap 0: waking up thread 5 on cap 0
+7047000: cap 0: thread 5 is runnable
+7047000: cap 2: stealing a spark from cap 1
+7048000: cap 0: running thread 10
+7066000: cap 2: stopping thread 4 (heap overflow)
+7066000: cap 2: requesting parallel GC
+7067000: cap 1: stopping thread 11 (thread yielding)
+7068000: cap 1: thread 11 is runnable
+7068000: cap 1: starting GC
+7068000: cap 3: stopping thread 7 (thread yielding)
+7068000: cap 3: thread 7 is runnable
+7068000: cap 3: starting GC
+7069000: cap 0: stopping thread 10 (thread yielding)
+7069000: cap 0: thread 10 is runnable
+7070000: cap 0: starting GC
+7070000: cap 2: starting GC
+7078000: cap 0: GC working
+7078000: cap 2: GC working
+7083000: cap 2: GC idle
+7090000: cap 0: GC idle
+7111000: cap 1: GC working
+7121000: cap 1: GC idle
+7141000: cap 3: GC working
+7150000: cap 0: GC done
+7150000: cap 1: GC done
+7150000: cap 2: GC done
+7150000: cap 3: GC idle
+7150000: cap 3: GC done
+7151000: cap 2: GC working
+7151000: cap 2: GC idle
+7151000: cap 2: GC done
+7151000: cap 2: GC working
+7152000: cap 2: GC idle
+7152000: cap 2: GC done
+7152000: cap 2: GC working
+7152000: cap 2: GC idle
+7152000: cap 2: GC done
+7166000: cap 2: finished GC
+7167000: cap 0: finished GC
+7167000: cap 0: running thread 5
+7167000: cap 1: finished GC
+7168000: cap 1: running thread 11
+7168000: cap 2: running thread 4
+7168000: cap 3: finished GC
+7169000: cap 0: stopping thread 5 (thread blocked)
+7170000: cap 0: running thread 10
+7172000: cap 1: stopping thread 11 (thread yielding)
+7172000: cap 1: thread 11 is runnable
+7172000: cap 2: stopping thread 4 (thread yielding)
+7172000: cap 2: thread 4 is runnable
+7174000: cap 0: stopping thread 10 (thread yielding)
+7174000: cap 0: thread 10 is runnable
+7174000: cap 0: running thread 10
+7174000: cap 2: running thread 4
+7175000: cap 1: running thread 11
+7228000: cap 0: waking up thread 5 on cap 0
+7228000: cap 0: thread 5 is runnable
+7228000: cap 0: stopping thread 10 (thread finished)
+7228000: cap 0: running thread 5
+7229000: cap 0: waking up thread 6 on cap 1
+7230000: cap 0: stealing a spark from cap 1
+7231000: cap 1: stopping thread 11 (thread yielding)
+7231000: cap 1: thread 11 is runnable
+7231000: cap 1: waking up thread 6 on cap 1
+7232000: cap 1: thread 6 is runnable
+7232000: cap 1: running thread 11
+7249000: cap 1: stopping thread 11 (thread blocked)
+7249000: cap 1: running thread 6
+7250000: cap 0: stopping thread 5 (thread yielding)
+7250000: cap 0: thread 5 is runnable
+7251000: cap 0: running thread 5
+7253000: cap 1: stopping thread 6 (thread blocked)
+7254000: cap 1: creating thread 12
+7254000: cap 1: creating spark thread 12
+7254000: cap 1: thread 12 is runnable
+7254000: cap 1: running thread 12
+7255000: cap 1: stealing a spark from cap 2
+7294000: cap 1: stopping thread 12 (thread yielding)
+7294000: cap 2: stopping thread 4 (thread blocked)
+7295000: cap 1: thread 12 is runnable
+7295000: cap 1: running thread 12
+7295000: cap 2: creating thread 13
+7295000: cap 2: creating spark thread 13
+7295000: cap 2: thread 13 is runnable
+7296000: cap 2: running thread 13
+7297000: cap 2: running a local spark
+7300000: cap 0: waking up thread 11 on cap 1
+7301000: cap 0: stealing a spark from cap 3
+7301000: cap 1: stopping thread 12 (thread yielding)
+7301000: cap 1: thread 12 is runnable
+7302000: cap 1: waking up thread 11 on cap 1
+7302000: cap 1: thread 11 is runnable
+7303000: cap 1: running thread 12
+7341000: cap 1: waking up thread 4 on cap 2
+7342000: cap 1: stopping thread 12 (thread finished)
+7342000: cap 1: running thread 11
+7342000: cap 2: stopping thread 13 (thread yielding)
+7342000: cap 2: thread 13 is runnable
+7343000: cap 1: waking up thread 6 on cap 1
+7343000: cap 2: waking up thread 4 on cap 2
+7343000: cap 2: thread 4 is runnable
+7344000: cap 1: thread 6 is runnable
+7344000: cap 1: stopping thread 11 (thread finished)
+7344000: cap 1: running thread 6
+7344000: cap 2: running thread 13
+7346000: cap 1: stopping thread 6 (thread blocked)
+7346000: cap 1: creating thread 14
+7346000: cap 2: stopping thread 13 (thread yielding)
+7346000: cap 2: thread 13 is runnable
+7347000: cap 1: creating spark thread 14
+7347000: cap 1: thread 14 is runnable
+7347000: cap 1: running thread 14
+7347000: cap 2: running thread 4
+7347000: cap 2: stopping thread 4 (thread blocked)
+7348000: cap 1: stealing a spark from cap 0
+7348000: cap 2: running thread 13
+7349000: cap 2: waking up thread 4 on cap 2
+7349000: cap 2: thread 4 is runnable
+7349000: cap 2: stopping thread 13 (thread finished)
+7350000: cap 2: running thread 4
+7350000: cap 2: waking up thread 6 on cap 1
+7350000: cap 2: stealing a spark from cap 0
+7351000: cap 1: stopping thread 14 (thread yielding)
+7351000: cap 1: thread 14 is runnable
+7351000: cap 1: waking up thread 6 on cap 1
+7352000: cap 1: thread 6 is runnable
+7353000: cap 1: running thread 14
+7468000: cap 2: stopping thread 4 (heap overflow)
+7468000: cap 2: requesting parallel GC
+7469000: cap 1: stopping thread 14 (thread yielding)
+7469000: cap 1: thread 14 is runnable
+7471000: cap 1: starting GC
+7472000: cap 0: stopping thread 5 (thread yielding)
+7472000: cap 0: thread 5 is runnable
+7473000: cap 0: starting GC
+7502000: cap 3: starting GC
+7503000: cap 2: starting GC
+7510000: cap 1: GC working
+7514000: cap 2: GC working
+7518000: cap 2: GC idle
+7518000: cap 3: GC working
+7523000: cap 3: GC idle
+7524000: cap 1: GC idle
+8359000: cap 0: GC working
+8368000: cap 0: GC idle
+8368000: cap 0: GC done
+8368000: cap 1: GC done
+8368000: cap 2: GC done
+8368000: cap 3: GC done
+8369000: cap 2: GC working
+8369000: cap 2: GC idle
+8369000: cap 2: GC done
+8369000: cap 2: GC working
+8369000: cap 2: GC idle
+8369000: cap 2: GC done
+8370000: cap 2: GC working
+8370000: cap 2: GC idle
+8370000: cap 2: GC done
+8383000: cap 0: finished GC
+8383000: cap 2: finished GC
+8384000: cap 0: running thread 5
+8384000: cap 1: finished GC
+8384000: cap 1: running thread 6
+8384000: cap 2: running thread 4
+8384000: cap 3: finished GC
+8384000: cap 3: running thread 3
+8385000: cap 1: stopping thread 6 (thread finished)
+8386000: cap 1: running thread 14
+8389000: cap 2: stopping thread 4 (thread yielding)
+8389000: cap 2: thread 4 is runnable
+8389000: cap 2: running thread 4
+8389000: cap 3: stopping thread 3 (thread blocked)
+8390000: cap 1: stopping thread 14 (thread yielding)
+8390000: cap 1: thread 14 is runnable
+8393000: cap 0: stopping thread 5 (thread yielding)
+8393000: cap 0: thread 5 is runnable
+8400000: cap 3: running thread 7
+8403000: cap 3: stopping thread 7 (thread yielding)
+8403000: cap 3: thread 7 is runnable
+8403000: cap 3: running thread 7
+8404000: cap 1: running thread 14
+8465000: cap 2: stealing a spark from cap 0
+8504000: cap 1: stealing a spark from cap 0
+8623000: cap 3: waking up thread 3 on cap 3
+8623000: cap 3: thread 3 is runnable
+8623000: cap 3: stopping thread 7 (thread finished)
+8634000: cap 0: running thread 5
+8635000: cap 3: running thread 3
+8640000: cap 0: stopping thread 5 (thread yielding)
+8640000: cap 0: thread 5 is runnable
+8640000: cap 3: stopping thread 3 (thread blocked)
+8641000: cap 3: creating thread 15
+8641000: cap 3: creating spark thread 15
+8641000: cap 3: thread 15 is runnable
+8649000: cap 3: running thread 15
+8650000: cap 3: running a local spark
+8661000: cap 3: stopping thread 15 (stack overflow)
+8663000: cap 3: running thread 15
+8670000: cap 2: stopping thread 4 (heap overflow)
+8670000: cap 2: requesting parallel GC
+8671000: cap 1: stopping thread 14 (thread yielding)
+8671000: cap 1: thread 14 is runnable
+8671000: cap 3: stopping thread 15 (thread yielding)
+8671000: cap 3: thread 15 is runnable
+8671000: cap 3: starting GC
+8672000: cap 1: starting GC
+13162000: cap 0: starting GC
+13162000: cap 2: starting GC
+13170000: cap 1: GC working
+13171000: cap 0: GC working
+13172000: cap 2: GC working
+13177000: cap 1: GC idle
+13178000: cap 0: GC idle
+13178000: cap 2: GC idle
+13186000: cap 3: GC working
+13204000: cap 1: GC done
+13204000: cap 2: GC done
+13204000: cap 3: GC idle
+13204000: cap 3: GC done
+13205000: cap 2: GC working
+13205000: cap 2: GC idle
+13205000: cap 2: GC done
+13205000: cap 2: GC working
+13205000: cap 2: GC idle
+13205000: cap 2: GC done
+13206000: cap 2: GC working
+13206000: cap 2: GC idle
+13206000: cap 2: GC done
+13229000: cap 0: GC done
+13244000: cap 0: finished GC
+13244000: cap 2: finished GC
+13245000: cap 0: running thread 5
+13245000: cap 1: finished GC
+13245000: cap 1: running thread 14
+13245000: cap 2: running thread 4
+13249000: cap 1: stopping thread 14 (thread yielding)
+13249000: cap 1: thread 14 is runnable
+13249000: cap 2: stopping thread 4 (thread yielding)
+13249000: cap 2: thread 4 is runnable
+13249000: cap 2: running thread 4
+13250000: cap 0: stopping thread 5 (thread yielding)
+13250000: cap 0: thread 5 is runnable
+13250000: cap 1: running thread 14
+13251000: cap 0: running thread 5
+13292000: cap 2: stealing a spark from cap 0
+13294000: cap 1: stealing a spark from cap 3
+13312000: cap 0: stopping thread 5 (thread blocked)
+13312000: cap 2: stopping thread 4 (thread yielding)
+13312000: cap 2: thread 4 is runnable
+13313000: cap 0: creating thread 16
+13313000: cap 0: creating spark thread 16
+13313000: cap 0: thread 16 is runnable
+13314000: cap 0: running thread 16
+13314000: cap 0: stealing a spark from cap 1
+13314000: cap 2: running thread 4
+13340000: cap 2: waking up thread 5 on cap 0
+13341000: cap 0: stopping thread 16 (thread yielding)
+13341000: cap 0: thread 16 is runnable
+13341000: cap 2: stealing a spark from cap 1
+13342000: cap 0: waking up thread 5 on cap 0
+13342000: cap 0: thread 5 is runnable
+13342000: cap 0: running thread 16
+13364000: cap 0: stopping thread 16 (thread yielding)
+13364000: cap 0: thread 16 is runnable
+13364000: cap 0: running thread 16
+13364000: cap 1: stopping thread 14 (thread blocked)
+13365000: cap 1: creating thread 17
+13365000: cap 1: creating spark thread 17
+13365000: cap 1: thread 17 is runnable
+13365000: cap 1: running thread 17
+13365000: cap 1: stealing a spark from cap 3
+13375000: cap 2: stealing a spark from cap 1
+13423000: cap 2: stealing a spark from cap 1
+13428000: cap 0: waking up thread 14 on cap 1
+13429000: cap 0: stopping thread 16 (thread finished)
+13429000: cap 0: running thread 5
+13430000: cap 1: stopping thread 17 (thread yielding)
+13430000: cap 1: thread 17 is runnable
+13431000: cap 1: waking up thread 14 on cap 1
+13431000: cap 1: thread 14 is runnable
+13431000: cap 1: running thread 17
+13432000: cap 0: waking up thread 3 on cap 3
+13433000: cap 0: stealing a spark from cap 3
+13442000: cap 1: stopping thread 17 (thread blocked)
+13442000: cap 1: running thread 14
+13442000: cap 2: stopping thread 4 (thread yielding)
+13442000: cap 2: thread 4 is runnable
+13443000: cap 1: stealing a spark from cap 0
+13443000: cap 2: running thread 4
+13453000: cap 2: waking up thread 17 on cap 1
+13454000: cap 2: stealing a spark from cap 0
+13455000: cap 1: stopping thread 14 (thread yielding)
+13455000: cap 1: thread 14 is runnable
+13456000: cap 1: waking up thread 17 on cap 1
+13456000: cap 1: thread 17 is runnable
+13456000: cap 1: running thread 14
+13476000: cap 1: stopping thread 14 (thread finished)
+13476000: cap 1: running thread 17
+13476000: cap 1: stealing a spark from cap 3
+13505000: cap 2: stealing a spark from cap 1
+13539000: cap 2: stopping thread 4 (heap overflow)
+13539000: cap 2: requesting parallel GC
+13541000: cap 0: stopping thread 5 (thread yielding)
+13541000: cap 0: thread 5 is runnable
+13541000: cap 0: starting GC
+13541000: cap 1: stopping thread 17 (thread yielding)
+13541000: cap 1: thread 17 is runnable
+13541000: cap 1: starting GC
+13578000: cap 3: finished GC
+13578000: cap 3: starting GC
+13579000: cap 2: starting GC
+13585000: cap 1: GC working
+13591000: cap 2: GC working
+13593000: cap 3: GC working
+13595000: cap 2: GC idle
+13596000: cap 1: GC idle
+13603000: cap 3: GC idle
+13880000: cap 0: GC working
+13885000: cap 0: GC idle
+13885000: cap 0: GC done
+13885000: cap 2: GC done
+13886000: cap 1: GC done
+13886000: cap 2: GC working
+13886000: cap 2: GC idle
+13886000: cap 2: GC done
+13886000: cap 2: GC working
+13886000: cap 2: GC idle
+13886000: cap 2: GC done
+13887000: cap 2: GC working
+13887000: cap 2: GC idle
+13887000: cap 2: GC done
+13911000: cap 3: GC done
+13924000: cap 2: finished GC
+13925000: cap 1: finished GC
+13925000: cap 1: running thread 17
+13925000: cap 2: running thread 4
+13925000: cap 3: finished GC
+13926000: cap 3: running thread 15
+13928000: cap 1: stopping thread 17 (thread yielding)
+13928000: cap 2: stopping thread 4 (thread yielding)
+13929000: cap 1: thread 17 is runnable
+13929000: cap 1: running thread 17
+13929000: cap 2: thread 4 is runnable
+13929000: cap 2: running thread 4
+13931000: cap 3: stopping thread 15 (thread yielding)
+13931000: cap 3: thread 15 is runnable
+13931000: cap 3: waking up thread 3 on cap 3
+13931000: cap 3: thread 3 is runnable
+13932000: cap 3: running thread 15
+13941000: cap 2: stealing a spark from cap 1
+13944000: cap 1: stopping thread 17 (thread blocked)
+13944000: cap 2: stopping thread 4 (thread yielding)
+13945000: cap 1: creating thread 18
+13945000: cap 1: creating spark thread 18
+13945000: cap 1: thread 18 is runnable
+13945000: cap 1: running thread 18
+13945000: cap 2: thread 4 is runnable
+13946000: cap 1: stealing a spark from cap 3
+13946000: cap 2: running thread 4
+13990000: cap 2: waking up thread 17 on cap 1
+13991000: cap 2: stealing a spark from cap 1
+13992000: cap 1: stopping thread 18 (thread yielding)
+13992000: cap 1: thread 18 is runnable
+13992000: cap 1: waking up thread 17 on cap 1
+13992000: cap 1: thread 17 is runnable
+13993000: cap 1: running thread 18
+14018000: cap 1: stopping thread 18 (thread blocked)
+14018000: cap 1: running thread 17
+14018000: cap 1: running a local spark
+14019000: cap 2: stopping thread 4 (thread yielding)
+14019000: cap 2: thread 4 is runnable
+14020000: cap 2: running thread 4
+14029000: cap 2: waking up thread 18 on cap 1
+14030000: cap 1: stopping thread 17 (thread yielding)
+14030000: cap 1: thread 17 is runnable
+14030000: cap 1: waking up thread 18 on cap 1
+14030000: cap 2: stealing a spark from cap 3
+14031000: cap 1: thread 18 is runnable
+14031000: cap 1: running thread 17
+14035000: cap 3: stopping thread 15 (thread blocked)
+14036000: cap 2: stopping thread 4 (thread yielding)
+14036000: cap 2: thread 4 is runnable
+14036000: cap 2: running thread 4
+14042000: cap 0: finished GC
+14042000: cap 0: running thread 5
+14042000: cap 3: running thread 3
+14045000: cap 3: stopping thread 3 (thread blocked)
+14047000: cap 0: stopping thread 5 (thread yielding)
+14047000: cap 0: thread 5 is runnable
+14048000: cap 0: running thread 5
+14052000: cap 0: stopping thread 5 (thread finished)
+14057000: cap 2: waking up thread 15 on cap 3
+14061000: cap 2: stopping thread 4 (thread finished)
+14064000: cap 3: waking up thread 15 on cap 3
+14065000: cap 3: thread 15 is runnable
+14065000: cap 3: running thread 15
+14068000: cap 1: stopping thread 17 (thread yielding)
+14068000: cap 1: thread 17 is runnable
+14068000: cap 3: stopping thread 15 (thread blocked)
+14070000: cap 0: thread 17 is runnable
+14070000: cap 1: migrating thread 17 to cap 0
+14075000: cap 0: running thread 17
+14078000: cap 1: running thread 18
+14079000: cap 1: stopping thread 18 (thread blocked)
+14080000: cap 0: stopping thread 17 (thread yielding)
+14080000: cap 0: thread 17 is runnable
+14081000: cap 0: running thread 17
+14094000: cap 0: waking up thread 18 on cap 1
+14096000: cap 0: stopping thread 17 (thread finished)
+14098000: cap 1: waking up thread 18 on cap 1
+14098000: cap 1: thread 18 is runnable
+14099000: cap 1: running thread 18
+14099000: cap 1: waking up thread 15 on cap 3
+14102000: cap 1: stopping thread 18 (thread finished)
+14103000: cap 3: waking up thread 15 on cap 3
+14103000: cap 3: thread 15 is runnable
+14103000: cap 3: running thread 15
+14103000: cap 3: waking up thread 3 on cap 3
+14104000: cap 3: thread 3 is runnable
+14104000: cap 3: stopping thread 15 (thread finished)
+14110000: cap 3: running thread 3
+14146000: cap 3: stopping thread 3 (making a foreign call)
+14147000: cap 3: running thread 3
+14147000: cap 3: stopping thread 3 (making a foreign call)
+14157000: cap 3: running thread 3
+14191000: cap 3: stopping thread 3 (thread finished)
+14204000: cap 3: requesting sequential GC
+14206000: cap 3: starting GC
+14229000: cap 0: GC working
+14242000: cap 0: GC idle
+14242000: cap 0: GC done
+14243000: cap 0: GC working
+14243000: cap 0: GC idle
+14244000: cap 0: GC done
+14244000: cap 0: GC working
+14244000: cap 0: GC idle
+14244000: cap 0: GC done
+14244000: cap 0: GC working
+14244000: cap 0: GC idle
+14245000: cap 0: GC done
+14254000: cap 3: finished GC
+14261000: cap 0: running thread 2
+14306000: cap 0: stopping thread 2 (thread finished)
+14344000: cap 0: shutting down
+14345000: cap 1: shutting down
+14346000: cap 2: shutting down
+14346000: cap 3: shutting down
+
