From fcc0d97ae0bae4e3cf99377d42a1ffe1066fcb44 Mon Sep 17 00:00:00 2001
From: Dan <46821332+nsadeveloper789@users.noreply.github.com>
Date: Wed, 6 Jan 2021 16:04:02 -0500
Subject: [PATCH] GP-569: Added trace interpolation and extrapolation
(emulation)
---
.../gdb/model/impl/GdbModelTargetThread.java | 6 +-
Ghidra/Debug/Debugger/certification.manifest | 2 +
.../src/main/help/help/TOC_Source.xml | 6 +-
.../DebuggerObjectsPlugin.html | 6 +-
.../DebuggerPcodeStepperPlugin.html | 81 ++
.../images/DebuggerPcodeStepperPlugin.png | Bin 0 -> 28876 bytes
.../DebuggerRegistersPlugin.html | 2 +-
.../DebuggerStackPlugin.html | 7 +-
.../DebuggerThreadsPlugin.html | 49 +-
.../DebuggerTimePlugin.html | 15 +-
.../images/DebuggerTimePlugin.png | Bin 19520 -> 19756 bytes
.../core/debug/AbstractDebuggerPlugin.java | 3 +
.../core/debug/DebuggerCoordinates.java | 158 ++-
.../core/debug/gui/DebuggerResources.java | 146 ++-
.../DebuggerListingAutoReadMemoryAction.java | 4 +-
.../gui/listing/DebuggerListingPlugin.java | 94 +-
.../gui/listing/DebuggerListingProvider.java | 44 +-
.../DebuggerListingTrackLocationAction.java | 30 +-
...emoryStateListingBackgroundColorModel.java | 8 +-
.../gui/modules/DebuggerModulesProvider.java | 3 -
.../core/debug/gui/pcode/BranchPcodeRow.java | 43 +
.../gui/pcode/DebuggerPcodeStepperPlugin.java | 61 +
.../pcode/DebuggerPcodeStepperProvider.java | 679 +++++++++++
.../core/debug/gui/pcode/EnumPcodeRow.java | 43 +
.../debug/gui/pcode/FallthroughPcodeRow.java | 41 +
.../core/debug/gui/pcode/OpPcodeRow.java | 51 +
.../plugin/core/debug/gui/pcode/PcodeRow.java | 26 +
.../core/debug/gui/pcode/UniqueRow.java | 146 +++
.../gui/register/DebuggerRegistersPlugin.java | 32 +-
.../register/DebuggerRegistersProvider.java | 85 +-
.../gui/stack/DebuggerStackProvider.java | 50 +-
.../core/debug/gui/stack/StackFrameRow.java | 14 +-
.../gui/thread/DebuggerThreadsProvider.java | 123 +-
.../debug/gui/time/DebuggerTimePlugin.java | 33 +-
.../debug/gui/time/DebuggerTimeProvider.java | 118 +-
.../core/debug/gui/time/SnapshotRow.java | 4 +-
.../gui/watch/DebuggerWatchesProvider.java | 33 +-
.../plugin/core/debug/gui/watch/WatchRow.java | 10 +-
.../platform/DbgengX64DisassemblyInject.java | 1 +
...AbstractReadsTargetPcodeExecutorState.java | 115 ++
.../DebuggerEmulationServicePlugin.java | 287 +++++
.../emulation/DebuggerTracePcodeEmulator.java | 85 ++
.../ReadsTargetMemoryPcodeExecutorState.java | 120 ++
...eadsTargetRegistersPcodeExecutorState.java | 76 ++
.../DebuggerStaticMappingServicePlugin.java | 81 +-
.../DebuggerTraceManagerServicePlugin.java | 130 +-
.../workflow/DisassembleAtPcDebuggerBot.java | 139 ++-
.../services/DebuggerEmulationService.java | 83 ++
.../DebuggerStaticMappingService.java | 8 +-
.../services/DebuggerTraceManagerService.java | 3 +
.../ghidra/pcode/exec/AsyncPcodeExecutor.java | 30 +-
.../exec/AsyncWrappedPcodeArithmetic.java | 13 +
.../AsyncWrappedPcodeExecutorStatePiece.java | 14 +
.../ghidra/pcode/exec/TracePcodeUtils.java | 2 +-
...DebuggerPcodeStepperPluginScreenShots.java | 86 ++
.../time/DebuggerTimePluginScreenShots.java | 5 +-
.../thread/DebuggerThreadsProviderTest.java | 22 +-
.../gui/time/DebuggerTimeProviderTest.java | 101 +-
.../DebuggerStaticMappingServiceTest.java | 19 +-
.../exec/TraceRecorderAsyncPcodeExecTest.java | 2 +-
.../Framework-TraceModeling/build.gradle | 1 +
.../trace/TraceBytesPcodeExecutorState.java | 16 +-
...aceCachedWriteBytesPcodeExecutorState.java | 257 ++++
.../TraceMemoryStatePcodeArithmetic.java | 12 +
...aceMemoryStatePcodeExecutorStatePiece.java | 18 +-
.../pcode/exec/trace/TracePcodeEmulator.java | 101 ++
.../pcode/exec/trace/TraceSleighUtils.java | 2 +-
.../UnknownStatePcodeExecutionException.java | 52 +
.../DBTraceRegisterContextManager.java | 3 +-
.../data/DBTraceDataSettingsAdapter.java | 6 +-
.../listing/AbstractDBTraceCodeUnit.java | 10 +-
.../listing/AbstractDBTraceDataComponent.java | 4 +-
.../database/listing/DBTraceCodeManager.java | 7 +
.../trace/database/listing/DBTraceData.java | 4 +-
.../database/listing/DBTraceDataAdapter.java | 66 +-
.../DBTraceDataArrayElementComponent.java | 22 +-
.../DBTraceDataCompositeFieldComponent.java | 22 +-
.../database/listing/DBTraceInstruction.java | 7 +-
.../listing/UndefinedDBTraceData.java | 29 +-
...essSnapRangePropertyMapAddressSetView.java | 3 +-
...BTraceAddressSnapRangePropertyMapTree.java | 6 +
.../database/memory/DBTraceMemBuffer.java | 2 +-
.../database/memory/DBTraceMemoryManager.java | 22 +
.../database/memory/DBTraceMemorySpace.java | 93 +-
.../AbstractDBTraceProgramViewListing.java | 525 +++++---
.../AbstractDBTraceProgramViewMemory.java | 162 +--
...actDBTraceProgramViewReferenceManager.java | 193 +--
.../database/program/DBTraceProgramView.java | 425 +++++--
.../DBTraceProgramViewBookmarkManager.java | 60 +-
.../DBTraceProgramViewEquateTable.java | 41 +-
.../DBTraceProgramViewFunctionManager.java | 64 +-
.../program/DBTraceProgramViewListing.java | 10 +-
.../program/DBTraceProgramViewMemory.java | 43 +-
.../DBTraceProgramViewMemoryBlock.java | 4 +-
.../DBTraceProgramViewProgramContext.java | 46 +-
.../DBTraceProgramViewRegisterListing.java | 6 +
...DBTraceProgramViewRegisterMemoryBlock.java | 4 +-
.../program/DBTraceProgramViewRegisters.java | 6 +
.../program/DBTraceProgramViewRootModule.java | 59 +-
.../DBTraceProgramViewSymbolTable.java | 22 +-
.../DBTraceVariableSnapProgramView.java | 2 +
.../AbstractDBTraceSpaceBasedManager.java | 14 +-
.../space/DBTraceDelegatingManager.java | 18 +-
.../database/stack/DBTraceStackManager.java | 4 +-
.../symbol/DBTraceReferenceManager.java | 4 +-
.../symbol/DBTraceReferenceSpace.java | 2 +-
.../trace/database/time/DBTraceSnapshot.java | 49 +-
.../database/time/DBTraceTimeManager.java | 40 +-
.../main/java/ghidra/trace/model/Trace.java | 4 +-
.../trace/model/listing/TraceCodeManager.java | 53 +-
.../trace/model/listing/TraceCodeUnit.java | 45 +-
.../model/memory/TraceMemoryOperations.java | 50 +
.../memory/TraceMemoryRegisterSpace.java | 23 +-
.../trace/model/program/TraceProgramView.java | 10 +-
.../symbol/TraceReferenceOperations.java | 4 +-
.../trace/model/time/TraceSchedule.java | 1051 +++++++++++++++++
.../trace/model/time/TraceSnapshot.java | 33 +-
.../trace/model/time/TraceTimeManager.java | 32 +
.../trace/util/DataAdapterFromDataType.java | 17 +
.../trace/util/DataAdapterFromSettings.java | 54 +
.../ghidra/trace/util/DataAdapterMinimal.java | 40 +
.../trace/util/DefaultTraceTimeViewport.java | 277 +++++
.../java/ghidra/trace/util/MemoryAdapter.java | 189 +++
.../ghidra/trace/util/TraceRegisterUtils.java | 19 +
.../ghidra/trace/util/TraceTimeViewport.java | 211 ++++
.../trace/util/TraceViewportSpanIterator.java | 82 ++
.../trace/util/WrappingCodeUnitIterator.java | 44 +
.../trace/util/WrappingDataIterator.java | 44 +
.../trace/util/WrappingFunctionIterator.java | 52 +
.../util/WrappingInstructionIterator.java | 44 +
.../exec/trace/TracePcodeEmulatorTest.java | 641 ++++++++++
.../exec/trace/TraceSleighUtilsTest.java | 2 +-
.../symbol/DBTraceReferenceManagerTest.java | 2 +-
.../trace/model/time/TraceScheduleTest.java | 519 ++++++++
.../util/DefaultTraceTimeViewportTest.java | 106 ++
.../ProposedUtils/certification.manifest | 2 +
.../data/ExtensionPoint.manifest | 2 +
.../table/CustomToStringCellRenderer.java | 21 +-
.../pcode/emu/AbstractPcodeEmulator.java | 35 +
.../pcode/emu/AbstractPcodeMachine.java | 227 ++++
.../ghidra/pcode/emu/BytesPcodeThread.java | 183 +++
.../ghidra/pcode/emu/DefaultPcodeThread.java | 402 +++++++
.../ghidra/pcode/emu/InstructionDecoder.java | 48 +
.../java/ghidra/pcode/emu/PcodeMachine.java | 125 ++
.../pcode/emu/PcodeStateInitializer.java | 69 ++
.../java/ghidra/pcode/emu/PcodeThread.java | 288 +++++
.../pcode/emu/SleighInstructionDecoder.java | 103 ++
.../emu/x86/X86PcodeStateInitializer.java | 48 +
.../exec/AccessPcodeExecutionException.java | 33 +
.../pcode/exec/AddressOfPcodeArithmetic.java | 14 +-
.../exec/AddressOfPcodeExecutorState.java | 6 +
.../exec/AnnotatedSleighUseropLibrary.java | 68 +-
.../pcode/exec/BigIntegerPcodeArithmetic.java | 10 +
.../pcode/exec/BytesPcodeArithmetic.java | 10 +
.../exec/ComposedSleighUseropLibrary.java | 46 +
.../InterruptPcodeExecutionException.java | 22 +
.../pcode/exec/PairedPcodeArithmetic.java | 12 +
.../pcode/exec/PairedPcodeExecutorState.java | 21 +
.../exec/PairedPcodeExecutorStatePiece.java | 14 +
.../ghidra/pcode/exec/PcodeArithmetic.java | 20 +
.../pcode/exec/PcodeExecutionException.java | 42 +
.../java/ghidra/pcode/exec/PcodeExecutor.java | 105 +-
.../pcode/exec/PcodeExecutorStatePiece.java | 3 +
.../java/ghidra/pcode/exec/PcodeFrame.java | 85 +-
.../java/ghidra/pcode/exec/PcodeProgram.java | 216 ++++
.../ghidra/pcode/exec/SleighExpression.java | 8 +-
.../java/ghidra/pcode/exec/SleighProgram.java | 66 --
.../pcode/exec/SleighProgramCompiler.java | 17 +-
.../pcode/exec/SleighUseropLibrary.java | 44 +-
.../SuspendedPcodeExecutionException.java | 22 +
.../ghidra/util/AbstractAddressSetView.java | 8 +-
.../ghidra/util/MergeSortingIterator.java | 2 +
.../main/java/ghidra/util/UniqIterator.java | 52 +
173 files changed, 10969 insertions(+), 1424 deletions(-)
create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html
create mode 100644 Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/images/DebuggerPcodeStepperPlugin.png
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/BranchPcodeRow.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperPlugin.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperProvider.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/EnumPcodeRow.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/FallthroughPcodeRow.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/OpPcodeRow.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/PcodeRow.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/gui/pcode/UniqueRow.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/AbstractReadsTargetPcodeExecutorState.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerEmulationServicePlugin.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/DebuggerTracePcodeEmulator.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/ReadsTargetMemoryPcodeExecutorState.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/plugin/core/debug/service/emulation/ReadsTargetRegistersPcodeExecutorState.java
create mode 100644 Ghidra/Debug/Debugger/src/main/java/ghidra/app/services/DebuggerEmulationService.java
create mode 100644 Ghidra/Debug/Debugger/src/screen/java/ghidra/app/plugin/core/debug/gui/pcode/DebuggerPcodeStepperPluginScreenShots.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TraceCachedWriteBytesPcodeExecutorState.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/TracePcodeEmulator.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/pcode/exec/trace/UnknownStatePcodeExecutionException.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/model/time/TraceSchedule.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/DataAdapterFromSettings.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/DataAdapterMinimal.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/DefaultTraceTimeViewport.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/MemoryAdapter.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/TraceTimeViewport.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/TraceViewportSpanIterator.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingCodeUnitIterator.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingDataIterator.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingFunctionIterator.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/main/java/ghidra/trace/util/WrappingInstructionIterator.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/pcode/exec/trace/TracePcodeEmulatorTest.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/model/time/TraceScheduleTest.java
create mode 100644 Ghidra/Debug/Framework-TraceModeling/src/test/java/ghidra/trace/util/DefaultTraceTimeViewportTest.java
create mode 100644 Ghidra/Debug/ProposedUtils/data/ExtensionPoint.manifest
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/AbstractPcodeEmulator.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/AbstractPcodeMachine.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/BytesPcodeThread.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/DefaultPcodeThread.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/InstructionDecoder.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/PcodeMachine.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/PcodeStateInitializer.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/PcodeThread.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/SleighInstructionDecoder.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/emu/x86/X86PcodeStateInitializer.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/AccessPcodeExecutionException.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/ComposedSleighUseropLibrary.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/InterruptPcodeExecutionException.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/PcodeExecutionException.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/PcodeProgram.java
delete mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/SleighProgram.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/pcode/exec/SuspendedPcodeExecutionException.java
create mode 100644 Ghidra/Debug/ProposedUtils/src/main/java/ghidra/util/UniqIterator.java
diff --git a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetThread.java b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetThread.java
index 294c1adb6d..c268453f48 100644
--- a/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetThread.java
+++ b/Ghidra/Debug/Debugger-agent-gdb/src/main/java/agent/gdb/model/impl/GdbModelTargetThread.java
@@ -35,10 +35,8 @@ import ghidra.util.Msg;
@TargetObjectSchemaInfo(
name = "Thread",
- elements = {
- @TargetElementType(type = Void.class) },
- attributes = {
- @TargetAttributeType(type = Void.class) })
+ elements = { @TargetElementType(type = Void.class) },
+ attributes = { @TargetAttributeType(type = Void.class) })
public class GdbModelTargetThread
extends DefaultTargetObject
The application of these special properties to each object to determine its behavior and relevant actions allows all objects to be treated generically. This feature has several diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html new file mode 100644 index 0000000000..e7ef4f2ac5 --- /dev/null +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/DebuggerPcodeStepperPlugin.html @@ -0,0 +1,81 @@ + + + +
+ + +P-code is the "microcode" of Ghidra's processor specifications, compiled from its SLEIGH + specification. Originally designed to facilitate static analysis, it is easily applied to + emulation as well. Stepping each p-code operation is an effective means of debugging the + SLEIGH. The plugin provides two panes: 1) The p-code listing, and 2) Temporary ("Unique") + variables. The listing works similarly to the dynamic listing. It displays each p-code + operation, highlighting the current "counter", which is the next operation to be executed. + There is also a cursor, allowing selection of an operation. The variables view operates + similarly to the registers view, displaying the current value of each unique variable.
+ +P-code stepping is built into the emulation framework, and so the other UI elements + (listing, registers, etc.) will display machine state from emulated p-code operations, i.e., + partially executed machine instructions. The p-code stepper provides a means of navigating time + at p-code-level and displaying p-code-level details of the machine state.
+ +The unique variables table displays information about temporary variables, including their + values and user-assigned types. It has the following columns:
+ +The p-code stepper provides the following actions:
+ +This action is available when the current coordinates have some positive number of p-code + ticks. It steps the trace backward to the previous p-code tick, possibly using emulation. Note + that stepping backward does not affect the target, and many windows that would ordinarily + interact with a live target, may no longer do so, until the user steps back to the present. + Note also that any component or script that does interact with the target and record things + "into the present" may not cause updates in windows that are not displaying the present.
+ +This action is available when a thread is selected. It steps the current thread forward to + the next p-code tick, using emulation. Note that emulation does not affect the target, and many + windows that would ordinarily interact with a live target, may not longer do so, until the user + steps back to the present. Note also that any component or script that does interact with the + target and record things "into the present" may not cause updates in windows that are not + displaying the present.
+ + diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/images/DebuggerPcodeStepperPlugin.png b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerPcodeStepperPlugin/images/DebuggerPcodeStepperPlugin.png new file mode 100644 index 0000000000000000000000000000000000000000..112f3f6f3ce3efbbcdf6b5e9ee89e6b1ea26a8c6 GIT binary patch literal 28876 zcmb@u1yoeu8#Szg(&8W?4UQt+Au%8#gVNn0-Q7be3P^Xu&@J69(%qd(4BegYMSu0L z_gn8;AD6|NxpQac+~=J0oc-**55CfpB3S4|=y&ei!Fu=hjqIH}NS?ssIn)QhU!(j6 zt2=kB!r#3Sly}nHOhj?T9i3_e9m>6$LMRkdqDJ+b*2>e!dJXvB!>6a#ctkTK2m`$a zWq9MFqCN8ajPn|Ur%eB^fb0zOzs$Ga5Ut78TLFyvM{Pv0qoa+iU-{QlO8~0f zx#Rpf))s&0&ioa=wb#57`D6Q~m$%pNlQRP~V2H>E5Hj%WL;VvXL3eH7QAp|Fb^O*B zP(&rt?fJSuA?PDd3e>LZq3g6hW0AmQK5G)-g*(oVp9rFQCi6X;oZvP=zBxmXM}NnL z4`A$35dW}c)ItfV{l?MbZq-*xo^Y^HVY7F(}O%w#*ugl*fQ=)qAhv?}d zvOxj<{I_?wwj}>3d zr|(FZU!B9u^E KL{-cjoG)AT9-2N?M7~etzDM>tjbL67hZ0^lV{kmx`&a{8%)4 z2hyVAbu?YFa*wI)5YP6tMn1dpnGDv9YEZA6RE-ooJ%e#2Gc+MlQ~s!N7*-h?!$8T- zG-RUX>kHI`pK~+tmB|#m4kW-%zn8Y&rLB<|9GJOsEtI{KzT%00EwrXHlScjmSwH%B z419g9ff$_dKEfbLRvbS5IkjIMU%8baT+L9GcpK;M3gbnuKHkG;3GvPA<1TvmI}|S+ zx7Bl%i=S##SqXkK#>U33j+2 wsFYJxmGus-7FXkZh^t?~?gkxVGa{i= zb9j)*?>0@J8JSS|JnbB+Z$3qzF;~weZD)6{wLNR-cq=+v2CNmY4`of G=i+M6#e!J88cBn z;nwzn$~>x=QM8v0fpdvR^|R2Tb5Ho;G$&Jyi-63xH6l1<+2m1#?sH;Zk-&wcjd2ZN z#6V8wia%(*U5=4a#}-*%p~~elX6jR`haF{iIyOq@F@EZByJGQ&jV)B{+rK|`rNL!T zjW8L_73Ou^F3Wz=e6;+;iUBrWq~9Hd&*Fv8pc+zJTPv*oV0?%NhETt_2?$Upco{Uu zZCHkg<&EUOI+R1l!Ya>3A!%QR7Qv3zadC0eSGYAw4J0J6F3OCB1bEzR%1Q9MjG IZ9#Zy;YSI%jn=28}$&54k426$E zYZldD-tg35U$@T|r>AgRt;}nak~oApF6q3o9FnI^#jjCN2Rq6Y`+;)x6;jEtfKo@o z=7)HZTT`AkU1^!OORkLKWLB1Kh;=)g-k;9Uu7$sl@*CvcX}oC=h7g+bhCo&|nh7+W zK7RlHo&G0@%U&zN+Dx@AzCLSJ)Yu>|Le*+JA-LSO05UETM3SQAe&$81kgF$y{W7RK z@crJ;R^joqRJBSAna;5192}eBg-ULs;#HJBUV7o78bfT_Bx2&?X+s&aYg6S;98}}h zZ=gqkT_)qlnHIBSaYvF #h81oSto)%5P7$U!cA0o%Twe zdHO3$F=^JV%AN`em>UM%zf6wSwMiJ(!j2baigJs;M#O$UJa42M{@}%HzacpZ3pA-X z3-!Zg67H{;jhZ@+H!EgHbCZ~L50A4WdwrvJ&OxjG^_hbCIiAFn-DIkSgLIAzuWFrB zahH_9)tf*Mk~gH#o|GTm$7& E7bu;jq+j( *wLs`&KqBxkpd0gVn{|p@WuSiH5cTdhfO}^_5C;&U2oL~W@(OC z7l&&?0@tT$!k0ee?#b>~=e~At-=cCD551{##G_LTn3 N@#EQfeP~Km?3j z|Kph_R|2ITH|{cyJuxiunc{??i|yK-)t*>3li5oLi+t^^gzl4-V%_$Z#^<7QV`ruI z*VV2=>F)@4wlmgzU%;go&+bMOH+kO2kX2QUi$mC@y!K+}*c|rcj$CU(x+0_Bx@2Rh zkZ*9kudx{kN0ZZO_BQXWqG3bibsjC%F%XU-SRu-l7SDa1KNQxnM#5dT9knkl=KD6c zSZUdCl9U?o;kJ2S*!z*h>ywO~ 5U7l1;{J8(XmU;h%LP-CA0;3syKU`S!xmH8 zcqAIZJO%JKTsXRGk~Vzy8XJ;Y1y8_T57h;PGG+xHTSvjyhW$09s)X OA%0Zphl8tJ4Xjr@RQfZ!ygIS~~LmN8^qxsVd7kA}T zWX*|4tYRK8@V>EhmG9P3gI<_S>9R)_o&s<1PX~Q8Tut*f&rz%;!#6KMnsan=s=BYK zsX5}_Vdj6%>e{!w@oje}FCCkd=S}1FIh{g*y2?`H)v=m3RfLVDrDd*KWq~lS7p0K5 zbRZFj(R775E+OH&eARLsDq$Lr>ode!VdFIplNB+SMfyr_yqX!3vd9h*P^oh*o?Rs{ zlZyrnlK_)DsiX0rk9TQfLrf%?3{T%x12|VWHm)gFzmXd_S<~i>Rc~7$%&%2(o%F-D z(&fbBZkEf*cK%qeC1Q+dtgrf5{ow3}fVbOj6N*XC@19pDw4mMLExcVW$z70DxGbp* z_)e+h%*_0RA>5W?w{y4b=UgYhn`e%8v#?F5b}ao?^$NW4PUD!}cEIv(PkM_QZpCz> z=h)#RXC?JCoyT!;M|b8V8(zTBR1{VmUnB`NnZyEpBp2TLX@uL;ng)%XuO)oO6{Ta8 zg1TMw7B2{rJzW(&6}*|wjQ_KzPSjxXz1S))zHrxb!r7V(O-3;YpF_^s_JO0aS+|ka z4QxwdeGM;n<${S9`drg>6quj8?w=}fK_KmqPJ@>g6!zzAG3V#xB}Q4_5b6yNF>e}F z{cves( c?|gW=3nm-aSF>^Eg|MX18CLFHfw?=bCd862Fq(zbrZ0?`Fz#z81SE z(r#|?kDI}tXq)0#+W7uJv(xrGudtycJL}tn&_b`Uf5zSvp)U9<_9~SYiK>oUQ{}0S zqMe9JTT?9HrRz$+o1!xPZv66@Kjz%VSU&zmFLu=oDvx>4dugq#eo%zVy~Igy$4||Q zV%@Xl#XVv{{C+fgRl7P8d{)|FQU38knTr O{^=34t>Kso~XyJQMiv*!p@ayo)*JJ_bGx-`*QR7WFS4UBHmv1}$lln(ihvozG(z z{T)-$IK=F()@Yt$er_8PmxcInrbOCsmXutz&GH-4>co54!#@Z4F@uqR9<&NX?l<0C zt6jDx-aJyTFjG-2djGMN^Mn0Yjb@2>PG5q#$1fyNU-o*xq0uTg!E?LZYuBkt*vIJ| ze@pZ4QQmPSyb@@BAd}N>Oy-@xbTD0A?hPzh38wsot{w-M-&9Hsa+WLllJXDwm+Q=( z8-FD K#f*Sblt+cVtR=NY_5t+w#)hXjO@>t!wo2p?I?9*IW_DL5z<2k27>HpSJkt zI_n*qyq2~IG20~J@a$?FE$}2ilyhuT-Yrz>8Z4aS?a{fauNXckj8r o)}3PS z#~@iH&Rs#FpV3$BgIfR0q%(0JSzk0*W{Svp)qL-v^5%~9H(TVLnQC1;P2BXkae?6p zdqbn|ZDROaX9?ZoAAig%#Vf7MQaf{6lDnT$<|`L_PF0xawVgc|o5Q~mhAWXoF0%4P zw+|1?T?%V4B8?S0V8ucMi3ShXhQ03o;Qlbhx_z`TDirx6jW1flWwzYdon^&YK@{$i zSiXF$xmf2p$ZfcE (a^rH6 z=Vt%-;4veY=i1sDA(ifjQ#uMZqk&|450PEf5lwBL7Dr@)O7@GO_YQu&(E%0Wbk~{5 zB;f}Y&vwLWrMNR0Fdp)Y*snYJ?;!6pEAU5kN3$U|2_p&L?WmWcEp6Bwb&;_chA1K7 z&7;q}l)h3-*5u815_h~f*6Pp}x;ogsdxU=eNmRmw65rpLn0e@{k2D=*IE#SS<%K9F zHUmp>?1y2JPk-WzLiOrY3;}A=PPI?uhx@rv;s=bMa=!bJ4_h_Pvg=-O?1djN)MCkP z?D8);OvP}{F8OG!-Q 0NPj>+e-?cIa(|}GSgv%VK;qz18ouZNAXgS8zrv)7nK6z&( ?H0rregZe&@9v^@Dmo>z{AR69;dh#8E|(mQ^+AGlk1YN;8*Erzxr@ znZ&Q<7%C#N@f}-KWPfY{rQ$M?*WemXJW@0L2==4g=5XYOkHNiSjX#3#yG5?O6S)nq zxp+Lhk~ePM{TK<4LDLWJkwNdq8zW*E)74HtDPdWsr1F*jTz0ZD`yiX!U>W1P?&^lt z3;l?Cn)QgQ#^6;$M*;sULzGKWL6;-zMTg%5U$EK$edcioQxV?|RLuuLxnGx+olVWr z<{gf>F)ied4kqT3{EDhtWu-kx_uX5H2BG=Qao$a76H$LMm$uv;tww@f6jW}S{Y_|j zqNCHAj7Pn})fu*)leHSDqzM{->oQwr?C!g=wR_}p(931K(i8hoW3kRV-_~Mlp0EDK zuxk4=+T%A&xQ>3VH&-WiYeUb=`5F_|OqF>NFa!+1(?4yw5-RMk%@RH8w-5yXEPj{n z*Q=umtX@5A;m1GKW@@)V62P?1ij$b06mD;lqn|neD&SA`;<2n=KyjiELYeGNQx^*1 zD1r4I0bszxWeN5z>?_<>ZQ)W41 zx2Vs+J}TGuwQRd>1&A?9&}c zQ8<#eOD!tp@iv9mBg+fJ1mm`})uI2*8!Soj83`PGTdOcfVlO}1*eEa01e6!Ke)z`P zs8ZHoX}@H0jlG-EaOOd(cx@sAevznJsVPdp)aF|PFwZ$kg%q?hI;jhYq)%_er?-7y zKxNj3whu>@=m4o^&LFnj9G{N! SV7Q>6#}etL 0JhM= 1+%2) zIsJ{FBg}Io;xk5SPafO~Mh2!A$6_Pdp@r1L7XDa^5i}|Cc~Q|FwY57bJoa^KU6C%H zQ|0x>Z2{tsGs?vJcfIOn-LE)h>tXzy-CxZQW*rR&&kl-l38G&M`vnjPaQ7p=M~RO! zC5DCRQ1jUl &6h~Id=W594so?0G`@&+oMLWw+YZp81jxH zorV_E?BU{(3(XhAy;pp(aLNgD96NC!Zd%8H4Ovdtt!`hvxtnF`bR3Z<7$OG@a6=+N z&X1Rt+yN9o6hbaKIiR~c%ku-h#3G}Yz#pR{KTBbrEW)O>;pS|)tXHKmiZ*jmhp=hf z&S}xNZ!^AowfovFcOB61@rg2EVAP5# $kS{|dfj~0r z*8$J88p}rB>>p>-49#G4Jdl>M;oXKTod-YNu0G(e5`38FCnb@plvSRV7>zw`j_e=c znD%)@kE4H@nx~;S^8qrq6fnJ`K=R@MXFd0^FoOh%qVm%P(Vg3dOLHP89INd5zU}s= zsC`CE^*kyjhRR!Bv(|vfga)YFX8?dYty-!H6`nG0ZOa_UmYL3h9o>K0{~# ;O^&M-iOI62DmSN%x=lSwCa+Lud?S8}l8Ct294I6I^nc9^{h8GcDI)1rL GDKxa?a=ssS 1s6pAPXMzdUl!^p$)U)SCdVDq>;S&wU~O<0_)og!jHy;W s2tE*|$AT&Jsac1*WrW-FUihCO>W%W|v(UKJ6P~bAuIcpgCrL z?|GOS@Poabq5}^|5^Mp JE}_EMu<70VyS8lHJ6NUrdeUb7(bfLZ^X9v~%e zyMpa|cA^Yn2Y(5SRNYz&DMSev_RL&Is3o@=H6kgA9=5gwvzY@~GwCMrH;okicp5rx zA+`oG8=yGg+5654t9PU~ua(QP7>>8>!)@j^k5rk?j2;&>nQ PkJ>Bu!&@_83S4#G6y7S}>6J=i4<@S;- zwKBsn5J!^|rw|?yX2$0qy?va*;&<*;6Crco5*Xf~B{*bqhTF3aVp@czUUz6&9PH*J zDR;rtDAWD5er64bCrrJ;UFz^5?OD9F@!>`?=y2Usf7OdXY NF*TTsj#1H{?yTDZpE%s<${?nN(ZiA)uraV z#WT7_jat{=bM&uhvQ+&swEv7}KmpRpx g-%tWGhYIJ%2<&yZooX9qI#=WrsfL3}=me zBEbw1skSJmBN;eB_LpHk%SV4E16EbG)i2ey$nKQ9&Wx(#Kq~lp8?d6auWF4capcF- z%DHFnH2nB%6iM2H6J4_P&7M@hkm*cnaFWAh0CE6-W>o%kF68kHc*0}B3N$=s&EYCO z>v9abKqT?WE7F+G?XwZFx|T6#V`iz98ygm55!N3_*Eym6+t33-g}vu`knc#nZtzsW z>A<{Hd$gdc@NP%m5)s(xbm4VzSbB*GH8wdP%&3^!){C-8q(nPR*RX#MWP5)Z7@SdY z90zIU(~N!!g3f(&AMVDt)Cop8sF^*=lE6s2xil>3kb;xYDqaAjF#Ll6Z_~03uP|Sw z)pFNkZy=zZ5TBVKEXwZjlcJ6TDYc sw|2HROyEIj&u|tHU65fwy~Bpn?RJB^1a|vrN^EL z3_$AbMrHLQw2K67j+AFPRWG{H@2WgqL8Z|z31#)$Xw|FOnv*JQ)C@W% Y`Kr7#|ZF3eAl-M9z80oChLMTZt@L0cCOX>Rs1h($?_Mksn z(_NTB7u 3n9h!pFVE zvU|x##tOSUWso`U7r igSH! zfrxYl715pZVl+KAC!hq?K6f@MI#pa~`?y|t?`X;x58(f{radTqu#TkK+{Wluv1vJS zyp-uP&A+`ZC3~HJD4wLbxtU1K!dKSPVsKB=7W4PO9!6y~d!V6@99!Nr-D>NJI4Hka zSL3)|3YQu>;yvkIx4F*Af|pEqo7L!zA$xuKkrZF)6W^NTzC!31^sXYifAvW6 E+Wh@u^EbA9d)-%ssD>;pHa*v)S~(vsR9MlcmxNtxzIMpmBH3nbBh#PPcN5%ATQHu2n?qqR$K~pJznV=pp$1Sv8Z}RD+ZAxj$5N>BDK%UyAeq$?u({ZGUHX zVO?%iXM4M`OHeSvJ|A-?du6%WajYwV*#tmLpJjN{SVP<#ztl*FvZFMT0R5&$BfGhgE+^@K?JtDYT>vBktM) zx#0%1y5%^Bhrzce)kpWoc>M_Kxf|vayN<=}1r%r^CB@wmP^)7;a_#F=;UJeg<@I;@ zM*Mpz+MQ8f+$=@jJrkDBY2MN+n~v_rjZi>#CO7M-LiyOp*0CaK+~9aTa}d{iNM} zjkn_`uP1bQzj!w{8;gh&UugCTSxKA!h|xwB5r3wjkcgi!j6X+C3$tFX>nU~;s9n#& zm5{}mn3b bbano2nC%w@qL 2<^-pogl|^%>63GZQRGsdyX}>OwWSS})2NDC1L5w|E5eRDFVJ6V zG?!+nV|m(q)zkfFXX&@LxBJftiezx$eEqA=xoBw Ku-I4IQio*a3I!ek&bOJI%{NZp{esYBU0-Sf}6Y)|}?&-)gn7u0Rl=E2; zpe1)Waf!Z_P&}v$OkE^4HF+i77j;|T1I7Xh)FHVF;-=9&CAnsAtmPsJ +tfH3)Lxht}pnIUWWX}k`&_`Rh5euA2Cy7RTl`jt3aWEe?2H$p2Mj1Z41b?v2>z^SV{* z1W@x@U13H#+=#cRz%r$n93Vd)D#T0*MzAETJV9Q@?`&h_B5VTaP3g%JeJ^epz_NAr z_e(L98pIs_gt3gJi7RAl*2CHwXPc=R86}zZIv#=K*#F)9(2IYlzXe2z&9E=ME0S)w z)t_Kg7Y=c$=w(HP&2+6_#f~~WicpF)hgtzj-K~V`_vK57|7KW)h_6e+y-U^MYPP86 zd*L{iG7}b#=&Hj)OUsnLlh47A9S#hhLT)bg1|Po|4?hU{;zD?Fh?eP%Mc{k+SW4MK z%y;bwmDA|`#raD5hV=haNwBO8+ *?E`4ZiLyot z;ENb+3(UM -3hfeh5aYxFR4JoaEjoZBGr~9A og^U|+(I*YU( z-1o;PWg6o1U}osGbAPE(clstY>Lh%W+q0nIAvBl0Fi!!TeYn~=fm6ueb#M>QIu3ya zh$Eq9n`AzKg*hCLO}WfSrpEoMrht3MzxcM#Z*RFRkXXciV=TiK(dWCkItV_%R{2_C zK0RdFcm)L#H6FyX*$10|Mc9nGI!k6SU#+rbfK7NTs8f}XH{G%4xoAX@$^*e*HR#C; z>`8Y-q9Zj8jqjZMg?TCE40MZvTA*tgYPCL+^RqDTg%mu(pCk+(imE;t$_SqqZQ5}0 z$D?(=ivzF3FE;e%xe+haaCpn9YO}dH$*WV4{42Bmp&}LU8;XnLU_B{%*F&sVZc_ei zu~k3*32m1?82Wj&fVykNda8{1yx(Ibm&J65H>t1YVbBxvv7OpzX`jf&RRf&_9`?gL zJl$oJ*Dxw+CdJXT+SU6@bFa4XNI*Y@NBP8=K0S&UeokE5u8&-*^T6eJlSXr)is9yN zDB^&+ ~%4fd<^yASHRvKDbKTW{rc;vWvSZ 4~CX{g%)tH6Dfq%?r=Yvn?A zuA;F#*kA5(b{;Q$AzkZmS3Y;-+1;$P)N5WtNn6+FVv;z`?}Eu2GiJ*Q4*Rm$fbtW+ z((=ZOgmXjyn_RjuSs;5P9bcz7rs6KR7lvB?i=ZfVOl{d6z _>UE*P6cNOF8`pgH>k+3OVw&OK6?sv+EN%XhK>(XM zl@BGVjr1=vF5)Hzfg0pDy*nVjMZ&k8&+B?xl!-r>BIL80UpdF>UmS33%&zc}AiH=B ztXyUFgO6Lp3eZ(eG~r;Q{M)%{Hk))Q@(iwfIqNu|^G6pT|3$$Y5(;ilVgP0(jC{1E zy855}-0C%U@5&BNP6&j!@B#_hpochQybj`rQvl=)CQssip-N}E(lsW3e-6JNw8SmE zPa^29vgG_xG +7lTKeCwv2BR1+yo&`aZK c?yC>netm zJ0>?a{kF~%m^KMMR{Q;cDa9`uBCLv(n;fa0nJlib;8xV+0=Q*b9Un~2(EL;o2MiMQ z-k~fKaqJ-fF6y6_p;%9tUtRG}CJTP*X^=ALFV?GcdT5Zu?=~`@qt)oXUMHS*o6}iq z1f1_u14fL{ -`TGWkbf5FY*W>kJZG+=uR zpdko`Y~24d&b6DIw=fnE79Re3?N(oSc>6Bk{gA)T0E&at3rf;k2zz$tFLk2{^&W8I z6*geAVNk1({`3GVTe( %@HiqLL j;1{1#1g$%KG|EUr`Q?(*1-<+ zk0KJo0!e?7;CBuIz3;11Az8k9by$H$EwDdlj~#Ysl&jU)px&FwX}K!p;vkWkp8iDi zZzw9WB06mN4Dz_GxJ2J@U~RavS4XweS REpp4JTZ#!oqjHH~`v%qOQtd&zDGfXLl~`pNuWSa;?r9M#l}KHXIlV z{~L+kb_@il8ua&kT>Noqp8A;kxr9! (qtkGi^=;Nbmj;6nkQ8trD$ zFFgUiJA|M^5gZc}^A<2aqyuYpr!Z$L +^X}{(qj-Rz8`AWNh ZdE+2`=G(sMAz=TLPTw3|p?C%$r)k8LO;@tH cffxDvad~p7A3vR^+Mr zs} T;$5cR|n>&8``7$a$lP%g}a1Dbidog%6 zJ5-JBHaZ+f!Q6*UB6w@xiVuLjLZ_w;v&&;e4s`_vLlFY2X?~Gw3ws#rdy=vI-3Ekr zg5!T<^H-YBrvoT9=IUM8ZI<4i1EkK Ukg$D6ZdrRGK9sEhT}EEsH>H%Xl`h`$)>>fRsY% zQ!)wNZ6WWy*1tz5HgMxV$G$WypV{^{~qI3cgAzzdyb+lO?I)o+_Jh z9SwkICe26X)42do&!ASV382cUc8)E^O7Hsi4KrGW0w|p#N}e<4&r9A3TBHSQT|18& z4hzX)gFZat6T;FQ>u`LBawH0YuzYApt3i>`V5-f8_MR)7{ lW)^}eFlhpq8CPO Lnwcvd_e z-LipU|F{geqn|e5iA)J%9;<~r8R_W*k#tJgN`;y#ao{I)4VB8qVFWlo&I~~=2H6K4 z>e|mXL*au%ZGG^1@Ctg@t%;JubVX#kLIXF+{)_Ls)VoNWzRs@nY36{d#T+1D-onNy zf7_2Xz*+(#m^}VUSo!ON8efUJcF|M!b5meKLe*F&_iQXFPSAr;_i!?CJb%@b@d59% z3Lvc*B*ba=`NdjX$uj=v-G8NMs|c+68+1+F9a})9=6L_c(wesGGi;lbwRa2YmA9M9 zKlrxTHg?7Re%JCRHuq&asmRpbka=K1P%kyWQpl0@LMLDpFRVW%0^oVz_KdY_-{>fv zOG^Tqri84ksm0=}BQ@LOCuoL#SW*AV!v?L7?BUNJF8;`@>jfM=K9H{V6bKpM_W8XG z92OwOzvBE9Y;*M#49;=8U|K3lIpy_q^Sr@n7L0W#HuQ~Agh6+I5vcOU?Z!cZzp4nE zaFE{E1IrhjP`;$XE2a6|y%$NYvY4|YW6PIvQV{)OEVVWh32D^&b5+8rI>-$D^&wlo zw4FF$!7gKSLC)6(5}eoEUaH8Wr3U~C1EEOz-4vF2tQKdH-Z{gHCKg16$=k2)VtILa zb!ww}+T9L017t$?kBgM4UjDc;y32FfuXvju#*R)GBPb#ZccUy^xHG>&0yDH=v9BGr zOQ{#hnu Cw-n~Ae3v&SIRgxBGQnDk^k(UDH*}G{Lbq2r zFmZtqcCYy)sfb$Fos|8xtEMLcm6cCRx|TuH>AR7FwAvpdeiz*jk4^!Pj+(VDF4bXF z+Eo7zp9N4MULy@o@6?HLEe^E+1k&)s50|I`?;nQn*~yW$p$R_HD+Csl_<)5?Xa4V( z#VkL`UTtY@J2PU(3kDrLlDy`&Yk9I)k~Q+ffpu!DTOVD?qQ!rIb(-c-C~I41bf83k z{!yD`E!OqiM1Lcubfe(0*t{VAJcymP65&*~T;Pp(@31o|f*GiL%fj+74QFElaT&bo z#CUbZF)o&Vld$;ih={!;59k`uU(gFkaoHiW-nTnwI)eW)h5*3r774)qI>E?ABzSwK zitMj<{t4RtIst5oS?0ODs3X3k-|g3Fb^6JPKd(Eh-jM|>*E*ONqrOsHVyR7Ktmsmw zJbR2i)z4>D^Y=!RcLjy!Ckui+N9%ZRo{Ng(US8UU01~fWXYu+d0bmz~8?aOd)w3pE zh?Y%cQF@t?iTe6-39Fcx-1FK_cysL^7ZNPOpjugjA*_KFJ*DtWYv)1PbEiAcpQ(=n z{%MG~R8~V%>95@+*TjZ$Jo<0~@E==DMjRL}eTG`AM0oL0yCi?X*W25H0e2HkC`eA8 zgxM_fsl)_Xe`}8Aqr+!CB7CJdelXzC3yNgm{Un*xVE&7f3zKnkJb}n(1#xLq+ek^* zR&e#kgc=teP8sV0JmTSI>0{)CvAo4E;^UP6Zqdks)Kd97sjA`#Yx$=qmkYex`ttt+ zo?AjRhy?&l2|b`edrKzrEaQTmwoH&2R7T_vS&MDrKneVi03LgE_FvAF&TRKT3>m#X zUK$y>3XnIdg^8RM4qL`11MewE^AJKCV~K 5ah95rL#4Mpi%Mp2FOY+Sg4$4w)8P*$TgZL8wguGz z$cLHYu}_DBO^_$W>5t3{9@6P`LZ8;A8^*i@j2O@ivD)Es(>)XMg2gWZ>jZ!c2nR>J z-g%}}>6SDZGtCM-T6-+M*uIkv*xO|18-R`TB%#MV>FF&pdM#$E !~0e0X#rznCbVsbJGVduel%GEVmD}iUE?V5?%SHfT@_yP zM~5!~x66}XlVFun;N*7md~
&!Bq(e|Fz8bAogD2y$Xg@Pe zv37HX?9DZCuZ|zEj9I%ul<#8%W!m+QRQg~K=SZgvn((SjO vj+g2oBx=Yyp^Ama|=ah0qJOuwx#peytB$raX=YpE9ADVgKL+ zHLR~T*FYox)A;@`?JC(DZkE}rV}TQN_y=@!<%Wj*wt}yZnKS%>e{MHnDdffgHTt2) zHJeiU kpKSS6W2j@^dY6_7w*0fFs;AMO&+017m{3_B_%rdRHiGhsT31O!s!A& zLx$MIrzR##9b41|ZwX(ZRl}KHzO9-Cn)NTT)y93GK{Hfcs^zM$8?Pz?E#@UN|8NNX zs^k)R3sYj*z$06`qG=j6UqQyVt=-{4F4%la&~KTsa8&Q*YbezJFPgNV;a+aat@^AW zM5rlvyIs`Mh`RE}-&*u{`QIcVE_ijh*3+|c6W=OM_g8pdT?@N!Bb33}i6WW8G~JS& z5M$NFXYthkv=DDOB6GLZf2>o++BiQ#HW_F9AQ~C>Y{5=mekGyaX4zoC_c6;le-L@& za~*nTf&CpL3E22Y35s|@vaxR42hJSQd->l2kwz`=ua^(gva*IvRo=XQNbJ`Lo_KM} z#6l9WR%spe#TZZq`saLcnuQ`A{^YVHSv+ka(F1*ui+>F|AoPT6;6AcS@WUmP5((0C zZ-EqM|CU$99|}E62TxAWK&{~8vQr+bpKsmCzhtz1rhQv-D08&Gk4J&B^=sh52q|C+ zx1#o)Xo`wRCE)d(Xj19?9TkArc+e@tOiCC8EY<0eW}86tew2!Hc#`qoefr?nmeVDz zB?SL3OC%#8nc#w}-fQ0>g*ZzBo~Yle+!?`HHTEw?#2?t42W(_E1PAHIyz>6nHr?(F zB>)oORKEx{^ifjq?IQExat7F03m}$Oz&NCXTu)G#uA9||0WfvHat_7KQ-KrhTaCu1 zSWg%De-Gr13cwzI_V!=C%nz6T|N3?UlYoWSH;uxWzt-`NMqmZYB5t~OA6 JhvRsq8tm|Err6%2&1i1k%P%dC074snLNt3XcqW?dpDI<$#-+*^1NZz3> z`ltTstjhfG{^Il~YdwJ;Hx)vqyv{vyG|OQa$oqRbbC!$rd-u%6*uaXi%V)DK-A7(k zM!7EwF?#1Jrwn34bD37(HJTr!)}B1RpHT2)Qm$adZY}oZzpnXdr>F9;<4Lr8l60(7 zN&9S!j9&MUq-0`Qhm8SmrwPPV2OORA-}i+6rzJCAV^$^b|Frg ?DWH_OQ2jH*ypf4gXWN9=`n)VMQ-ZP+ujbSJ*o7YIhA zx3~jGr}*ROW;0&?M}|G$P#g|794je>P`}@qf<_$g&XIY4|Mn7yn>~L#xjqlA7HGkL znXgSI(hLllf(%tA)j#lmYSNqQ$srVb-XS@6hzDH6-E?E};nqaIj;X0|qIn1ozEEP$ zVbuW-bi?>Xz35*jViY%ktBC2V@Cpfqs~|j3w!_EL0lgO?g_ qt0%uST5rzF1Q$jYT8#E8_>&OIATMK#^*riDQsM?xT6npfrc9*%{ zdFq22#vEwb^U?#E^7n@7jJ;--c@!AWw7kowiv0NB;LYkduTHur?=aQIYhRaZpRM7e z_xG?gZbiDqfL9G F*}DxCp57-N&zRJOhtQ2{ z(rwe#F@_}5Kh)GwmCM}u^nr_gC7u2l?Zx_M_-0RCjKA8}Na^jBZJ@UCKB1$|%LwSG zGku&xC>%@xl0SU*Ym1$Cy^r_WsIMoQY6ET=rDG_a&r^;Tr~RS4j+yu$XS@WT1Ezrd zU9C8pn*BEWbQ_ 09{U~6aQ8KW9+Cshe>vpv$yk0m>bV|cc-PF6 zH!UdCFGJPSkz`KNE!X-_=7KBwK+f**wV0WQ3O{lu1gV_}f;v=Q2!^`sdOp!X+W-{? zaG+sWxnnYV6$ps0On6=Gd}qx-Drp9ha7PzI(!=qn!&>N0{bRczT{?HWL9J*aU61t8 zrHcFC_oqxVw2VoDmdGG$@$b9N4%mX)DUhAFtGg5Sucj5|ws3Q=gOlp0Zi2Uapr6$M zTjA1IN4#*Qtr=h Q5E+)$GVArGclmN0kFwWy z4PFw0Gj&l{{7GM!m4Bs1*VS%?g2~W2W6lX?`B4+nC{eTGwmHYcHX)$zbm41fDi!E< z!Nt|xO#}AksEUlq6c@XuP)k2$r*_(d1`e)JfPn$BhJP*js+J+^e^%DroHiLd2$Oq- z?VadKYssGoEBL~~7{k^EF(0#U|GELa_*L(pBu3;9vfC9q6)FG>Taa?w4f^ycEZ9?_ zXD;TSZje)~<5%(n_&dod5(P<}U%9R-<9`a92#o9(`}v3NkBh)s9E^dX9FdA|e =&m$I&9syhNg923vA$6{xi(~R;#-Vz5sb^t40TK zQPBh|zFz#6+It}mC~p5&0?mf+2t2Se)sZ*CfJ-+gz}g=3&FA(V2Je=An46AXUhce1 zJ02+{rJ +)@6HY;cAFp9U^Rl4oI*7@ukR}e{BZf zjI81Vw9p6>%0w5VB9f$+yK=*@p z!+{o%4{1h-h}Q@_<|LWRICa7MHcJ;;O?F5f`8^jz{O;Jw!BSi7S?Gl$sE6|AY~ALB zF`*4ag#Amu>Gh!=Y2YnI)uiD`>2TRtorM+GyT`-Yt647LlBEmZod0OK5OKM9)B)Z6 zr}s=o8*V8riQ4&?H;+s@EkOcW!Og;Q; WiD_ P*!mAoyPc)Z zj>-h4$SNv@z^Tyw{y5N{qu@5{-nsRRos%s@r^nTV=e;B7L|**DvRIkWv82_S_x_r# zT eMYDzWLY>vG6K;mj!} z=nR`@O#$Pe@5Krb=hF7B@T_C6;urMPb&LC=5zJ{Ii qmhP{#89&uZ6F zsGY_-JzsD^JrvBw-1oBd5zyDkNj+ce $j|ZPv8(O>yoOGXG%fOgYToxpQ5wN3 zkp)6W01PxL1ZH`S50!2`PfxwKN;|OMUQWAh*Xz7}BM0EawY&LJMeV;BO1vma5nVNH z5MoT%g@~UbFg5)FvvL!e8(+N=fpG-Q=I4}$k&46JZ`|xLCU>j9E$>^bhr^q))FKE8 zF81N*r(5YC&%>cxVi1c2IP9EqfA96oYUO+ra-qcaOW~Pkb-NAL+LP_SZkItK{XN!8 zRIVrv<_av?zXezp@&LGzJm&HLRF-a9pnxrDq+oIMO6>mhecJ7{#+~n+o2CZ7jhbl) z#W!+7Imt>!k_47fIB)fuzF6GjfL*lt^FCfV1*p&VnH@ApdPU>0P)U#1?Jq%am7wTa zNRV@GoRGyg!QN7RP}GwF4y)2mP;%i!CZ!I(Vr%yvfb_}zC_cD+*SMla)&EPCX>uRZ zE^4-22IS^Mf1rfU?;^tFwO3Y3pX(>51e3G{4{SNT@i!z;*C7JM*px`@q&aoN4O6_l z?Kp%mDs8R_OXfg%ko)GPD3$oSt!nBIOeoR$ ;KXtXAiAI z?64)uF7LJFSPG)0)d&=u9WHlx1$c{lx30H Z)TrWi z&uvJ>IoAnet|9G*9M|s2?w_dFXeOl@fi$&u{Bi*V*rPqTd`XTSNG-Ln{v$OV%l}(w z)FO`Snw)xOZ>nmAde|42KJG}LJYJ~<`8n@M#qFX02>OBfKw6o~NoxMnAKJ~^<}n^F zhA&N0t3a-us~ihwBxNy6Rf(yTU|_{m1;?0vN2& z@}M&yOX%-qmvIYZs!9cnTZ0kJ(}(@DRW4+{kG*1d;ooe{)q#-z*diVYYR${=Y(5f_ z|A>xM+`s(!`x4iD+`9@Tjq0CLw(hqu-Ti;tB}$HEHJq`}AFY=v5qFI5o({u)CV}~! z-MAS^_b-$I&>SE_h49mcIT(nryf6$q{Z)lEAv%%z4oI8+6Y>8i7V=Nz^mh~kD180f z#{3gg`PF7hAQq+U#{*}8_EQbS>E{5Lz^j$|;#^Y*4N&LHC#z^dJ(qH+SS)E;+1+ paCJiBnJx(vA?oa^LW*HC>k%%W@wS06CL;-ML%;+=q|;BFK0IMSwpg%wdErZ zm=5cfb_5R!yIsW&)?P8rf7}sX6^ewyI02t~;X>>o3eAUopX01IQIf z%3=x*_?U^!foVoo__a}&QO<+@=&XWi3Fnf%r59w&s2Gk#aNc#TDoz1m0fz()Xx}V% zL9NzAkH0hPoryx*_fu1H)*#uFNor?d|Ge* EP^&o)(D`y+HU%w$OLqbX~_@cO^WT99+8S5KN zYN$>to`~2gu`(QCcTE|(nq?S`DEpR(a|jI%^>EN*yE-Zp?Y9K@Z=~n+>`p3Dt!E!o zOSpaStj_~;&`Wm3-sS0W?i?0>$*FOrA}jkXBAlGUIX;MVQY}BfvD9&z#?=UOFpn86 zTcr$Vtm;h5RI*JGDBE@y5%56nPJzLWeP08bDY}@a1az$31HG!!s}0}jsu{?bB-C^- zI$Y4Fl^kIs0Tv&irMg#*>0za3X4atMREum6`qr|E KQr8WGFrX`vH4CD4om#0sx)x+5@@VR$R$_80
^EeqsWX1tgvrQH_d~IcJKL?GlfjAtD9l}{71h+WS1ssp= nJjf$IbQNfvbU $}-LTX*N2!xr?F8X)2js||2s4U?7L z{F7i-f&?h=Ev(in!k)OfiCkrr(BdC&I;cUsw%*;d5MCU!UTIh{a-Fti+c5nSIDK)h zmnLFFeYWV1sJ?i1E~RH5i_cWr{5z2<)mo0$5(O+**V2KmfnB$-EGbFCEer2wUPH>; zAKt5Pb6YWm!hVXkp{k|;IcB46wXMB8PQ+SZ??7Az(zd&Ivv0l)s$_sUi0MvCyCpPw zrJLX8*-#H~@U?J<_x=v?>f#{|q2DCMIa?=Mmd-{HVXatGG!K0l&s b31v@vEj;y za9S6GYn^l3<}~xw?9+u?0WA5AS4)Dh>h<2z$Lr$Be+DVXKPC+`EEz >j$P$j0WAwR~tB n8>hdo07x(I+|qnBIf+(b^FvR@(@EY+S} z&LU^KmHW)c&DKUzd4l~7(EmE@OAO>VolH+(4u-LwIU^x-dN*0*fdYYd^ruZ<1S Sr|#Q{MH;9P(n)FCu_62lQxVBo^lpLl)Le!`m&z3lfa6r zD=UEsiPAK*w3j9)Chm3`4>abdrM;kxC`f-T8~tHlpDOR;m$G`_qh;)ZPiO*z*C?&` z>cQ@z!pUySPE5QWFQd#Z6uYHL?W;eYZF}?PAg)JIHDF>$zl9l(0%@BxIJ3Vyl>Byf zpL^kTl_pPNtEgAJmvg_{STwDs*Fqrs89!&%7Z7{TXkDtTiXF|dd)@xxf%$Y(X|{pl z=&J2#Zb7ezPB4cRlclS*Y75cWh0~|k(Ddp_1hcFf8`7B=RayCXU`>e>Iyjg?&4^30 zFtL446IZ#ons|o_6l5?k(Ar+!V*pG$Z9sncVz=d@pg?<-p8UobVc8TE2 Sp0i?(SleE!dQe(ct}|@W@tWNcBcWd_0k`N1>jRd$ zyV-ddV%q6sn$9U;OOfnh7$$a`B~So$P1`oBus9}DdEdZp+7->?hN^9??cfNhi> GDD5{RwB)x~9g(9U!d{w je$T5lUQ(M(|Eas)nIa+|rwWm*2$w&Af1ksC{B^wF_6^Cry zl`fGOHa+0KY?Pf@|ESdD=qcRF(@5frMG9=HXnA{7)j*222Yly;iG1p6x5+ADHzK%c zoVw2>pFbLET-d+rdPD!^z3hd>SZ&PIbkAhXUypunv5D>7NKp7wDbMmLjclO4*;}UQ zO8a_ktxGRz$G7}-cP;CuwnDxVfORx)Wo!}Y4(gAI)@en@_`ccSt-W_$Q#rx5VVl8% zRD009j8BR^3(&K%pR2LbAfK1pB^ZzqXZJtJ*QV-f6sIU2AOT&Jp&W_gfOW)hQ_L^8 z57+>72vDhp@2~}F*u?Rw$?zMo;4cXY-mWYaf3-jq75L+nX=yyyD!Bm6?j~W>n7{Km zBK+3-@ENgSR#EjphGgE%9r1$xdY+54?#vV&{8b!d*w?HL&=z6%tyT<)*q~)VCcH$l zG{fwV^;e7M<&R&n5KJVKW;2_7q$SD14$)r}ja9BoeL$@}aL{RVc-%hYn@3OX5BK$7 z{!# {tN;-I5GP94b&+k8?ffcC8M!CGrSH`$wsJgS zE=v4jmTpt3(3$fk33nl-f=d#lzCnp0!SbfbyzKai!X?f>P z_)g2bA1rl(4A}Kg_&lNtz`Pk(xdcMO=;eX=v6OH|$ta+f;Z}hKRb3%!c!^~Gt%$o* zlp^&>W-36%?b-Yh`_hBJgltjftMhF(aRwDC==BOkbgwevVpUSoq@dJzK?+MordU{} z5I471T660($BD35Q~6deuJq(Ng@y!iGXaHb9_rt54CYV$4-RXRyVk7nSDhE{U|4Z? z3vKc^Jn)fudnH1pn32B9B3DzM=Sf=&Yk@0v{vLxgo+&hekI|hsbq;7eAV?ANmQzjB zD^@F61x1}KWim%8f3WU`%|j_0u4{6~vMPTT`uNbi7&`w`i6IZaiNR8%KS%fn1!jC* zc$9%WFMno?=%;fcl0#HMLCkUn%Mpi{fnPjx#)h2ux=~Rd9Uv8@_v?+_p3zi>|G>a2 zuqQ~{;XKs*d^CZ4=+%q04u`@&5LMWpm-jLQmSwL@+z6>~BzynvUE--LcnO$TPDMd{ zJv>C}N&Uw^0QdNc$@Tfwz}RVJ #rN564CGAr-g3H5c(bI(!1E{w6P#M #!G zV)^l=Yyld)z?+f)QTj8_!p=8(`cP%1rv*_u3~2Qgl*Pp8slE}nLGNzcNF^96X=j^1 zc&J(`kOz~&AFAk_T_bx1=6MwIeP?^vByk(7uQoNMn&39PL6Unk5pih(LNH1oy!^RF zpk7UHkh%2tQ^b8Jvnp#7G|UHk(I52tE%|PS3O-hM*3DghVpGLUGSr`)=pGZJqZrB| zjLuD^dUVhmt!UH}q`pYL40dD=Jfw$6D|m{b-&PWzeo}eHE7l7#dhRKC_*c{fZu26n zmvy(An`DajLz-|V>vOT1*sf>8Z?vAz4l{&wXJslPc$U2#;-B9wEiI09x!jIk*mDM+ zwWYA~P%7Ceiil{qx7fU$`+2*Vl;`H9B+Yx`(8a@>A(D)mpl(Czb~*v`$LmXe4*+=s z&RnVp4it8%s}iW!nXVVWlLb<4?DNVXz$5O7{8Jy0ZEyEP>>a^PCb^kku8W#J5R@u= z=U4w&g<>f*JL^M;@iy3@jD^F6euAl9GXU(Kq&VGufV5t(##m|YcC+93IzCnKYfsBX zU!^|UwY9-T3RtB0fM(=-Nv|P1IPaC5^maY0sY!AW=wyul;?)swoxa=&+T~2 z`h512J44k5gD-_wFlWF-=77Pr$S5^YLr52j`>B^3PDS*lp(DvFA>CVCQhBgT?KaDU zH}SINUNW08`O5H{k-@>i&+XhcCaS321&40&ie>o7I;?o-f3zn!pl+rtZsalJAts&9 zsD_#=X|IHwW8!>bAt$Tu`%a&3gxUvPIYOb+5Lq=W(7Oa$$!f+!;vnIc1RjZ37548! zz8QDy-^4Mf)c8igEeHAnQW#b+@t FrW_BX_`ySj1X!e#)ih-`)0@PCNm~r;kY%S< zQP1KXJ&}gBo+xJw(d2pmK!>FES(NfQj;@D2HRFzb2&k*|M6=!IYp#eZ$ELRn(u0ig z#R4Sx##C9W6<{7-*f*?Wea6||;5 KU`>L1G)BtVmMl~KZ z9_T(Lnd7#U75n>rYl$A?u|JimzM4OV{g$TQ005@ z&;t`HFNB8qkoN79(tx(8ulfvPCv>?-=y*5myZnowuE>*>GZaL+A8<4n%5oeO_FGi= zh~@J<5BIkZsFYfmOLA=Or|+{9f`O4mG{mFnuEWb2fe0(?5F eoxJe!j4fLxz;5!*^wU@v)CM!&8uV)R+!c)kpn!a~K zN^vG}#iyRz*uo4A!z)1yKCCWo+~Yrc;mtm}B%7LnRwG|A$l9Smw*)vNKv`}>V64&u zb9DPXC+EYlRq|##5BqFi#?M#FL>o`*$vZ+GT$&!S%{dvyu1GP6tiB%f!^wEg6vrJZ zZ3aiOG|i>RT%w2Gm@-`ImCxvWsy)?xl=Vv<#}&xu-#lgB80}AME(xmcHej8iSsSX8 zK3Wjyj;j~{(-m5mAp3JWgcyj8Cg-?vQ=`D4xu|a B9SWj zZTK2Zm@-y9zgn-%cqdTmfIdy7k4ViZXD+-EDifK};`4274_?X2DNi 07(U%JeFyoYQ=Ud@M5u) zPb2*~*{$Yw7Qtnk4L1x a*8CYO3|oea9I*o8c7;P`DRPv1{E ~B5( zje4vk`oDJ-fY*i4BcNNCKo5ZJjb#U%jHl9onIq6Uh!TK2pFG(Ac29xLVGCHl`!htw zFqlvHSZJSnEc^pk*#gw9B?vBx8}s^A0t}v6j{ENW$4?kvzxeZ;%D=xM+@0J*kPpTx saEI_C@Y(JpgthhL!p{!@g>$ Table Columns The table displays information about registers, including their values and types. It has the - following columns
+ following columns:
- Favorite - a toggle to mark the register as a favorite. By default this includes the diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html index 57cfe6ad08..31a51579aa 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerStackPlugin/DebuggerStackPlugin.html @@ -24,13 +24,14 @@
The stack window displays the current trace's execution stack, as unwound and reported by the target. Not all debuggers will unwind the stack, in which case, this window displays a - synthetic innermost frame. Level 0 always refers to the innermost frame, and each incremental + synthetic innermost frame. When emulation was used to generate the current machine state, only + a synthetic frame is shown. Level 0 always refers to the innermost frame, and each incremental level refers to the next caller in the chain — most of the time. The current frame comprises one element of the tool's current "coordinates." Selecting a frame changes those coordinates, potentially causing other windows to display different information. Namely, the Registers window - will show registers for the current frame, assuming they can be retrieved The Listings may also - navigate to the current frame's program counter.
+ will show registers for the current frame, assuming they can be retrieved. The Listings may + also navigate to the current frame's program counter.Table Columns
diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html index de4de4c2a5..ae3807076a 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerThreadsPlugin/DebuggerThreadsPlugin.html @@ -86,25 +86,46 @@ Time window for a way to display and navigate to specific events in the trace's timeline. -+
Step Track - Backward
+ +
Step Track + Snap Backward
This action is available when there exists a snapshot previous to the current. It steps the + trace backward to the previous snapshot, causing most windows to display the recorded data from + the new point in time. Note that stepping backward does not affect the target, and many windows + that would ordinarily interact with a live target, may no longer do so, until the user steps + back to the present. Note also that any component or script that does interact with the target + and record things "into the present" will not cause updates in windows that are not displaying + the present.
+ ++ +
Step Trace + Snap Forward
This action is available when there exists a snapshot ahead of the current. It steps the + trace forward to the next snapshot, causing most windows to display the recorded data from the + new point in time. If the new point in time represents "the present" for a live trace, then + many windows will resume interacting with the target. Note that stepping the trace does not + affect the target; however, stepping back to the present may cause some windows to query the + target.
+ +
Step Track + Tick Backward
This action is available when there exists a point in time previous to the current. It steps - the trace backward once, causing most windows to display the recorded data from the new point - in time. Note that stepping backward does not affect the target, and many windows that would - ordinarily interact with a live target, may no longer do so, until the user steps back to the - present. Note also that any component or script that does interact with the target and record - things "into the present" will not cause updates in windows that are not displaying the - present.
+ the trace backward to the previous tick, possibly using emulation. Note that stepping backward + does not affect the target, and many windows that would ordinarily interact with a live target, + may no longer do so, until the user steps back to the present. Note also that any component or + script that does interact with the target and record things "into the present" may not cause + updates in windows that are not displaying the present. -
Step Trace +
-
Step Trace Tick Forward
This action is available when there exists a point in time ahead of the current. It steps - the trace forward once, causing most windows to display the recorded data from the new point in - time. If the new point in time represents "the present" for a live trace, then many windows - will resume interacting with the target. Note that stepping the trace does not affect the - target; however, stepping back to the present may cause some windows to query the target.
+This action is available when a thread is selected. It steps the current thread forward to + the next tick, using emulation. Note that emulation does not affect the target, and many + windows that would ordinarily interact with a live target, may no longer do so, until the user + steps back to the present. Note also that any component or script that does interact with the + target and record things "into the present" may not cause updates in windows that are not + displaying the present.
diff --git a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html index 85c569a78e..a38d8937fc 100644 --- a/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html +++ b/Ghidra/Debug/Debugger/src/main/help/help/topics/DebuggerTimePlugin/DebuggerTimePlugin.html @@ -24,7 +24,7 @@
Seek Trace to Present
This window displays all recorded "snapshots" in the current trace. Typically, there is one snapshot per event recorded. Other tables often display the times of various events or use time - ranges to describe lifespans of various records. Those times refer to the "Snap," which is a + ranges to describe lifespans of various records. Those times refer to the "snap," which is a 0-up counter of snapshot records. Thus, a snapshot is a collection of observations of a target's state, usually while suspended, along with any user mark up. Selecting a snapshot navigates to the selected point in time. Note that browsing the past may prevent other windows @@ -50,5 +50,18 @@
Description - a user-modifiable description of the snapshot or event. This defaults to the debugger's description of the event. + +Actions
+ +The time window provides the following action:
+ +Hide Scratch
+ +This toggle action is always available. It is enabled by default. The emulation service, + which enabled trace extrapolation and interpolation, writes emulated state into the trace's + "scratch space," which comprises all negative snaps. When this toggle is enabled, those + snapshots are hidden. They can be displayed by disabling this toggle. Note that navigating into + scratch space may cause temporary undefined behavior in some windows, and may prevent + interaction with the target.