Full Code of DevTechProfile/CapFrameX for AI

master c4399c8aa968 cached
1926 files
54.5 MB
14.4M tokens
12384 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (57,651K chars total). Download the full file to get everything.
Repository: DevTechProfile/CapFrameX
Branch: master
Commit: c4399c8aa968
Files: 1926
Total size: 54.5 MB

Directory structure:
gitextract_9m4195d4/

├── .dockerignore
├── .editorconfig
├── .editorconfig.inferred
├── .gitignore
├── AGENTS.md
├── CLAUDE.md
├── CapFrameX.sln
├── Jenkinsfile
├── LICENSE
├── PORTABLE_MODE.md
├── README.md
├── benchlab-service/
│   ├── PMD_Service.deps.json
│   ├── PMD_Service.runtimeconfig.json
│   ├── appsettings.Development.json
│   └── appsettings.json
├── capframex-linux/
│   ├── .gitignore
│   ├── .vscode/
│   │   ├── launch.json
│   │   ├── settings.json
│   │   └── tasks.json
│   ├── CLAUDE.md
│   ├── CMakeLists.txt
│   ├── CX Logo/
│   │   ├── CapFrameX.ai
│   │   ├── CapFrameX.eps
│   │   ├── CapFrameXLogoOnly.ai
│   │   └── CapFrameXLogoOnly.eps
│   ├── Display_Timing_Tracker_DEV_PLAN.md
│   ├── OVERLAY_DEV_PLAN.md
│   ├── README.md
│   ├── capframex.desktop
│   ├── scripts/
│   │   ├── build.sh
│   │   ├── capframex-daemon.service
│   │   ├── install-layer.sh
│   │   ├── install.sh
│   │   ├── run-dev.sh
│   │   ├── uninstall-layer.sh
│   │   └── uninstall.sh
│   └── src/
│       ├── app/
│       │   ├── CapFrameX.App/
│       │   │   ├── App.axaml
│       │   │   ├── App.axaml.cs
│       │   │   ├── CapFrameX.App.csproj
│       │   │   ├── Program.cs
│       │   │   ├── ViewModels/
│       │   │   │   ├── AnalysisViewModel.cs
│       │   │   │   ├── CaptureViewModel.cs
│       │   │   │   ├── CompareViewModel.cs
│       │   │   │   ├── MainViewModel.cs
│       │   │   │   └── SettingsViewModel.cs
│       │   │   ├── Views/
│       │   │   │   ├── AnalysisView.axaml
│       │   │   │   ├── AnalysisView.axaml.cs
│       │   │   │   ├── CaptureView.axaml
│       │   │   │   ├── CaptureView.axaml.cs
│       │   │   │   ├── CompareView.axaml
│       │   │   │   ├── CompareView.axaml.cs
│       │   │   │   ├── MainWindow.axaml
│       │   │   │   ├── MainWindow.axaml.cs
│       │   │   │   ├── SettingsPanel.axaml
│       │   │   │   └── SettingsPanel.axaml.cs
│       │   │   └── app.manifest
│       │   ├── CapFrameX.Core/
│       │   │   ├── Analysis/
│       │   │   │   ├── FrametimeAnalyzer.cs
│       │   │   │   └── StatisticsCalculator.cs
│       │   │   ├── CapFrameX.Core.csproj
│       │   │   ├── Capture/
│       │   │   │   ├── DaemonClient.cs
│       │   │   │   └── FrametimeReceiver.cs
│       │   │   ├── Configuration/
│       │   │   │   ├── AppSettings.cs
│       │   │   │   └── SettingsService.cs
│       │   │   ├── Data/
│       │   │   │   ├── Session.cs
│       │   │   │   └── SessionManager.cs
│       │   │   ├── Hardware/
│       │   │   │   ├── CpuInfo.cs
│       │   │   │   ├── GpuInfo.cs
│       │   │   │   ├── HardwareMonitor.cs
│       │   │   │   ├── SysfsReader.cs
│       │   │   │   └── VulkanGpuEnumerator.cs
│       │   │   ├── Hotkey/
│       │   │   │   └── GlobalHotkeyService.cs
│       │   │   └── System/
│       │   │       └── SystemInfoService.cs
│       │   ├── CapFrameX.Shared/
│       │   │   ├── CapFrameX.Shared.csproj
│       │   │   ├── IPC/
│       │   │   │   ├── Messages.cs
│       │   │   │   └── SocketClient.cs
│       │   │   └── Models/
│       │   │       ├── CaptureSession.cs
│       │   │       ├── FrameData.cs
│       │   │       └── GameInfo.cs
│       │   ├── CapFrameX.sln
│       │   └── FrameReceptionTest/
│       │       ├── FrameReceptionTest.csproj
│       │       └── Program.cs
│       ├── daemon/
│       │   ├── CMakeLists.txt
│       │   ├── common.h
│       │   ├── config.c
│       │   ├── config.h
│       │   ├── ignore_list.c
│       │   ├── ignore_list.h
│       │   ├── ipc.c
│       │   ├── ipc.h
│       │   ├── launcher_detect.c
│       │   ├── launcher_detect.h
│       │   ├── main.c
│       │   ├── process_monitor.c
│       │   └── process_monitor.h
│       └── layer/
│           ├── CMakeLists.txt
│           ├── capframex_layer.json
│           ├── data_export.c
│           ├── data_export.h
│           ├── ipc_client.c
│           ├── ipc_client.h
│           ├── layer.c
│           ├── layer.h
│           ├── swapchain.c
│           ├── swapchain.h
│           ├── timing.c
│           └── timing.h
├── dev-plans/
│   ├── MCP_Integration_DevPlan.md
│   ├── MCP_Server_Implementation_NET472_WPF_App.md
│   └── PantherLake_IMC_Clock_PawnIO_PR_Plan.md
├── overlay-templates/
│   └── OverlayEntryConfiguration_0.json
├── pmcreader-plugin/
│   ├── AGENTS.md
│   ├── CapFrameX.PmcReader.Merged.csproj
│   ├── CapFrameX.PmcReader.Plugin.csproj
│   ├── PmcReader/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── AMD/
│   │   │   ├── Amd10hCpu.cs
│   │   │   ├── Amd15hCpu.cs
│   │   │   ├── Amd16hCpu.cs
│   │   │   ├── Amd17hCpu.cs
│   │   │   ├── Amd19hCpu.cs
│   │   │   ├── Bulldozer.cs
│   │   │   ├── Jaguar.cs
│   │   │   ├── JaguarL2.cs
│   │   │   ├── JaguarNorthbridge.cs
│   │   │   ├── K10.cs
│   │   │   ├── Piledriver.cs
│   │   │   ├── PiledriverNorthbridge.cs
│   │   │   ├── Zen.cs
│   │   │   ├── Zen1.cs
│   │   │   ├── Zen2.cs
│   │   │   ├── Zen2DataFabric.cs
│   │   │   ├── Zen2L3Cache.cs
│   │   │   ├── Zen3.cs
│   │   │   ├── Zen3L3Cache.cs
│   │   │   ├── Zen4.cs
│   │   │   ├── Zen4DataFabric.cs
│   │   │   ├── Zen4L3Cache.cs
│   │   │   ├── Zen5.cs
│   │   │   ├── Zen5DataFabric.cs
│   │   │   ├── Zen5Diagnostics.cs
│   │   │   ├── Zen5L3Cache.cs
│   │   │   └── ZenL3Cache.cs
│   │   ├── App.config
│   │   ├── Cpu.cs
│   │   ├── GenericMonitoringArea.cs
│   │   ├── HaswellForm.Designer.cs
│   │   ├── HaswellForm.cs
│   │   ├── HaswellForm.resx
│   │   ├── Intel/
│   │   │   ├── AlderLake.cs
│   │   │   ├── AlderLakeL3.cs
│   │   │   ├── AlderLakeUncore.cs
│   │   │   ├── ArrowLake.cs
│   │   │   ├── ArrowLakeL3.cs
│   │   │   ├── GoldmontPlus.cs
│   │   │   ├── Haswell.cs
│   │   │   ├── HaswellClientArb.cs
│   │   │   ├── HaswellClientL3.cs
│   │   │   ├── HaswellClientUncore.cs
│   │   │   ├── HaswellEL3.cs
│   │   │   ├── MeteorLake.cs
│   │   │   ├── MeteorLakeArb.cs
│   │   │   ├── MeteorLakeL3.cs
│   │   │   ├── MeteorLakeUncore.cs
│   │   │   ├── ModernIntelCpu.cs
│   │   │   ├── SandyBridge.cs
│   │   │   ├── SandyBridgeEL3.cs
│   │   │   ├── SandyBridgeUncore.cs
│   │   │   ├── Skylake.cs
│   │   │   ├── SkylakeClientArb.cs
│   │   │   ├── SkylakeClientL3.cs
│   │   │   └── SkylakeClientUncore.cs
│   │   ├── Interop/
│   │   │   ├── AdvApi32.cs
│   │   │   ├── Kernel32.cs
│   │   │   ├── KernelDriver.cs
│   │   │   ├── OpCode.cs
│   │   │   ├── Ring0.cs
│   │   │   ├── ThreadAffinity.cs
│   │   │   ├── WinRing0.sys
│   │   │   ├── WinRing0x64.sys
│   │   │   └── winpmem_64.sys
│   │   ├── LICENSE
│   │   ├── PmcDiagnostics.cs
│   │   ├── PmcReader.csproj
│   │   ├── PmcReader.sln
│   │   ├── PmcReaderInterop.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── Resources.Designer.cs
│   │   │   ├── Resources.resx
│   │   │   ├── Settings.Designer.cs
│   │   │   └── Settings.settings
│   │   ├── README.md
│   │   └── app.manifest
│   ├── PmcReader.TestApp/
│   │   ├── App.xaml
│   │   ├── App.xaml.cs
│   │   ├── MainWindow.xaml
│   │   ├── MainWindow.xaml.cs
│   │   ├── PmcReader.TestApp.csproj
│   │   ├── SensorRow.cs
│   │   └── packages.config
│   ├── PmcReader.TestApp.sln
│   ├── PmcReaderInterop.Forwarder.cs
│   ├── PmcReaderSensorEntry.cs
│   ├── PmcReaderSensorPlugin.cs
│   ├── intel-perfmon/
│   │   ├── .github/
│   │   │   ├── CODEOWNERS
│   │   │   ├── bandit.yml
│   │   │   ├── dependabot.yml
│   │   │   └── workflows/
│   │   │       ├── bandit.yml
│   │   │       ├── codeql.yml
│   │   │       ├── create-perf-json.yml
│   │   │       ├── format-checks.yml
│   │   │       └── scorecard.yml
│   │   ├── .gitignore
│   │   ├── ADL/
│   │   │   ├── events/
│   │   │   │   ├── alderlake_goldencove_core.json
│   │   │   │   ├── alderlake_gracemont_core.json
│   │   │   │   ├── alderlake_uncore.json
│   │   │   │   └── alderlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── alderlake_metrics_goldencove_core.json
│   │   ├── ARL/
│   │   │   ├── events/
│   │   │   │   ├── arrowlake_crestmont_core.json
│   │   │   │   ├── arrowlake_lioncove_core.json
│   │   │   │   ├── arrowlake_skymont_core.json
│   │   │   │   ├── arrowlake_uncore.json
│   │   │   │   └── arrowlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── arrowlake_metrics_lioncove_core.json
│   │   ├── Atom_TMA.csv
│   │   ├── Atom_TMA.xlsx
│   │   ├── BDW/
│   │   │   ├── events/
│   │   │   │   ├── broadwell_core.json
│   │   │   │   ├── broadwell_fp_arith_inst.json
│   │   │   │   ├── broadwell_matrix.json
│   │   │   │   └── broadwell_uncore.json
│   │   │   └── metrics/
│   │   │       └── broadwell_metrics.json
│   │   ├── BDW-DE/
│   │   │   └── events/
│   │   │       ├── broadwellde_core.json
│   │   │       └── broadwellde_uncore.json
│   │   ├── BDX/
│   │   │   ├── events/
│   │   │   │   ├── broadwellx_core.json
│   │   │   │   ├── broadwellx_matrix.json
│   │   │   │   └── broadwellx_uncore.json
│   │   │   └── metrics/
│   │   │       ├── broadwellx_metrics.json
│   │   │       └── perf/
│   │   │           └── broadwellx_metrics_perf.json
│   │   ├── BNL/
│   │   │   └── events/
│   │   │       └── bonnell_core.json
│   │   ├── CLX/
│   │   │   ├── events/
│   │   │   │   ├── cascadelakex_core.json
│   │   │   │   ├── cascadelakex_fp_arith_inst.json
│   │   │   │   ├── cascadelakex_uncore.json
│   │   │   │   └── cascadelakex_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── cascadelakex_metrics.json
│   │   │       └── perf/
│   │   │           └── cascadelakex_metrics_perf.json
│   │   ├── CWF/
│   │   │   ├── events/
│   │   │   │   ├── clearwaterforest_core.json
│   │   │   │   ├── clearwaterforest_uncore.json
│   │   │   │   └── clearwaterforest_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── clearwaterforest_metrics.json
│   │   │       └── perf/
│   │   │           └── clearwaterforest_metrics_perf.json
│   │   ├── E-core_TMA_Metrics.csv
│   │   ├── E-core_TMA_Metrics.xlsx
│   │   ├── EHL/
│   │   │   └── events/
│   │   │       └── elkhartlake_core.json
│   │   ├── EMR/
│   │   │   ├── events/
│   │   │   │   ├── emeraldrapids_core.json
│   │   │   │   ├── emeraldrapids_uncore.json
│   │   │   │   └── emeraldrapids_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── emeraldrapids_metrics.json
│   │   │       └── perf/
│   │   │           └── emeraldrapids_metrics_perf.json
│   │   ├── GLM/
│   │   │   └── events/
│   │   │       ├── goldmont_core.json
│   │   │       ├── goldmont_fp_arith_inst.json
│   │   │       └── goldmont_matrix.json
│   │   ├── GLP/
│   │   │   └── events/
│   │   │       ├── goldmontplus_core.json
│   │   │       ├── goldmontplus_fp_arith_inst.json
│   │   │       └── goldmontplus_matrix.json
│   │   ├── GNR/
│   │   │   ├── events/
│   │   │   │   ├── graniterapids_core.json
│   │   │   │   ├── graniterapids_uncore.json
│   │   │   │   └── graniterapids_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── graniterapids_metrics.json
│   │   │       ├── graniterapids_retire_latency.json
│   │   │       └── perf/
│   │   │           └── graniterapids_metrics_perf.json
│   │   ├── GRR/
│   │   │   ├── events/
│   │   │   │   ├── grandridge_core.json
│   │   │   │   ├── grandridge_uncore.json
│   │   │   │   └── grandridge_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── grandridge_metrics.json
│   │   │       └── perf/
│   │   │           └── grandridge_metrics_perf.json
│   │   ├── HSW/
│   │   │   ├── events/
│   │   │   │   ├── haswell_core.json
│   │   │   │   ├── haswell_fp_arith_inst.json
│   │   │   │   ├── haswell_matrix.json
│   │   │   │   └── haswell_uncore.json
│   │   │   └── metrics/
│   │   │       └── haswell_metrics.json
│   │   ├── HSX/
│   │   │   ├── events/
│   │   │   │   ├── haswellx_core.json
│   │   │   │   ├── haswellx_matrix.json
│   │   │   │   └── haswellx_uncore.json
│   │   │   └── metrics/
│   │   │       ├── haswellx_metrics.json
│   │   │       └── perf/
│   │   │           └── haswellx_metrics_perf.json
│   │   ├── ICL/
│   │   │   ├── events/
│   │   │   │   ├── icelake_core.json
│   │   │   │   └── icelake_uncore.json
│   │   │   └── metrics/
│   │   │       └── icelake_metrics.json
│   │   ├── ICX/
│   │   │   ├── events/
│   │   │   │   ├── icelakex_core.json
│   │   │   │   ├── icelakex_uncore.json
│   │   │   │   └── icelakex_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── icelakex_metrics.json
│   │   │       └── perf/
│   │   │           └── icelakex_metrics_perf.json
│   │   ├── IVB/
│   │   │   └── events/
│   │   │       ├── ivybridge_core.json
│   │   │       ├── ivybridge_fp_arith_inst.json
│   │   │       ├── ivybridge_matrix.json
│   │   │       └── ivybridge_uncore.json
│   │   ├── IVT/
│   │   │   └── events/
│   │   │       ├── ivytown_core.json
│   │   │       ├── ivytown_matrix.json
│   │   │       └── ivytown_uncore.json
│   │   ├── JKT/
│   │   │   └── events/
│   │   │       ├── Jaketown_core.json
│   │   │       ├── Jaketown_matrix.json
│   │   │       └── Jaketown_uncore.json
│   │   ├── KNL/
│   │   │   └── events/
│   │   │       ├── knightslanding_core.json
│   │   │       ├── knightslanding_matrix.json
│   │   │       └── knightslanding_uncore.json
│   │   ├── LICENSE
│   │   ├── LNL/
│   │   │   ├── events/
│   │   │   │   ├── lunarlake_lioncove_core.json
│   │   │   │   ├── lunarlake_skymont_core.json
│   │   │   │   ├── lunarlake_uncore.json
│   │   │   │   └── lunarlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── lunarlake_metrics_lioncove_core.json
│   │   ├── MTL/
│   │   │   ├── events/
│   │   │   │   ├── meteorlake_crestmont_core.json
│   │   │   │   ├── meteorlake_redwoodcove_core.json
│   │   │   │   ├── meteorlake_uncore.json
│   │   │   │   └── meteorlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── meteorlake_metrics_redwoodcove_core.json
│   │   ├── NHM-EP/
│   │   │   └── events/
│   │   │       └── NehalemEP_core.json
│   │   ├── NHM-EX/
│   │   │   └── events/
│   │   │       └── NehalemEX_core.json
│   │   ├── PTL/
│   │   │   └── events/
│   │   │       ├── pantherlake_cougarcove_core.json
│   │   │       ├── pantherlake_darkmont_core.json
│   │   │       └── pantherlake_uncore.json
│   │   ├── README.md
│   │   ├── RKL/
│   │   │   ├── events/
│   │   │   │   ├── rocketlake_core.json
│   │   │   │   ├── rocketlake_uncore.json
│   │   │   │   └── rocketlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── rocketlake_metrics.json
│   │   ├── SKL/
│   │   │   ├── events/
│   │   │   │   ├── skylake_core.json
│   │   │   │   ├── skylake_fp_arith_inst.json
│   │   │   │   └── skylake_uncore.json
│   │   │   └── metrics/
│   │   │       └── skylake_metrics.json
│   │   ├── SKX/
│   │   │   ├── events/
│   │   │   │   ├── skylakex_core.json
│   │   │   │   ├── skylakex_fp_arith_inst.json
│   │   │   │   ├── skylakex_uncore.json
│   │   │   │   └── skylakex_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── perf/
│   │   │       │   └── skylakex_metrics_perf.json
│   │   │       └── skylakex_metrics.json
│   │   ├── SLM/
│   │   │   └── events/
│   │   │       ├── Silvermont_core.json
│   │   │       └── Silvermont_matrix.json
│   │   ├── SNB/
│   │   │   └── events/
│   │   │       ├── sandybridge_core.json
│   │   │       ├── sandybridge_matrix.json
│   │   │       └── sandybridge_uncore.json
│   │   ├── SNR/
│   │   │   └── events/
│   │   │       ├── snowridgex_core.json
│   │   │       ├── snowridgex_uncore.json
│   │   │       └── snowridgex_uncore_experimental.json
│   │   ├── SPR/
│   │   │   ├── events/
│   │   │   │   ├── sapphirerapids_core.json
│   │   │   │   ├── sapphirerapids_uncore.json
│   │   │   │   └── sapphirerapids_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── perf/
│   │   │       │   ├── sapphirerapids_metrics_perf.json
│   │   │       │   └── sapphirerapidshbm_metrics_perf.json
│   │   │       ├── sapphirerapids_metrics.json
│   │   │       └── sapphirerapidshbm_metrics.json
│   │   ├── SRF/
│   │   │   ├── events/
│   │   │   │   ├── sierraforest_core.json
│   │   │   │   ├── sierraforest_uncore.json
│   │   │   │   └── sierraforest_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── perf/
│   │   │       │   └── sierraforest_metrics_perf.json
│   │   │       └── sierraforest_metrics.json
│   │   ├── TGL/
│   │   │   ├── events/
│   │   │   │   ├── tigerlake_core.json
│   │   │   │   ├── tigerlake_uncore.json
│   │   │   │   └── tigerlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── tigerlake_metrics.json
│   │   ├── TMA_Metrics-full.csv
│   │   ├── TMA_Metrics-full.xlsx
│   │   ├── WSM-EP-DP/
│   │   │   └── events/
│   │   │       └── WestmereEP-DP_core.json
│   │   ├── WSM-EP-SP/
│   │   │   └── events/
│   │   │       └── WestmereEP-SP_core.json
│   │   ├── WSM-EX/
│   │   │   └── events/
│   │   │       └── WestmereEX_core.json
│   │   ├── mapfile.csv
│   │   ├── requirements.txt
│   │   ├── scripts/
│   │   │   ├── ci/
│   │   │   │   ├── verify_mapfile/
│   │   │   │   │   ├── .coveragerc
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── mapfile_schema.json
│   │   │   │   │   ├── requirements.txt
│   │   │   │   │   ├── test_data/
│   │   │   │   │   │   ├── 00_missing_mapfile_column/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 01_missing_event_file/
│   │   │   │   │   │   │   ├── SPR/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── sapphirerapids_core.json
│   │   │   │   │   │   │   │       └── sapphirerapids_uncore.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 02_mismatched_versions/
│   │   │   │   │   │   │   ├── SPR/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── sapphirerapids_core.json
│   │   │   │   │   │   │   │       └── sapphirerapids_uncore.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 03_correct_event_types/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 04_platform_referencing_multiple_event_dirs/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 05_mapfile_missing_event_file_reference/
│   │   │   │   │   │   │   ├── ICX/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── icelakex_core.json
│   │   │   │   │   │   │   │       ├── icelakex_uncore.json
│   │   │   │   │   │   │   │       └── icelakex_uncore_experimental.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 06_extra_mapfile_column/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 07_duplicate_event_file_type/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 08_mismatched_event_file_versions/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 09_correct_mapfile/
│   │   │   │   │   │   │   ├── SPR/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── sapphirerapids_core.json
│   │   │   │   │   │   │   │       └── sapphirerapids_uncore.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 10_bad_mapfile_version/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 11_mismatched_file_type/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 12_unexpected_file_path/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 13_duplicate_metric_entries/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 14_mapfile_missing_latency_file_reference/
│   │   │   │   │   │   │   ├── GNR/
│   │   │   │   │   │   │   │   ├── events/
│   │   │   │   │   │   │   │   │   ├── graniterapids_core.json
│   │   │   │   │   │   │   │   │   ├── graniterapids_uncore.json
│   │   │   │   │   │   │   │   │   └── graniterapids_uncore_experimental.json
│   │   │   │   │   │   │   │   └── metrics/
│   │   │   │   │   │   │   │       ├── graniterapids_metrics.json
│   │   │   │   │   │   │   │       └── graniterapids_retire_latency.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   └── 15_platform_referencing_multiple_metric_dirs/
│   │   │   │   │   │       └── mapfile.csv
│   │   │   │   │   ├── test_verify_mapfile.py
│   │   │   │   │   └── verify_mapfile.py
│   │   │   │   └── verify_perf_uncore_events/
│   │   │   │       ├── .coveragerc
│   │   │   │       ├── README.md
│   │   │   │       ├── __init__.py
│   │   │   │       ├── perf_uncore_csv_schema.json
│   │   │   │       ├── requirements.txt
│   │   │   │       ├── test_data/
│   │   │   │       │   ├── 00_basic.csv
│   │   │   │       │   ├── 01_missing_header.csv
│   │   │   │       │   └── 02_missing_column.csv
│   │   │   │       ├── test_verify_config.py
│   │   │   │       └── verify_perf_uncore_events.py
│   │   │   ├── config/
│   │   │   │   ├── perf-uncore-events-bdx.csv
│   │   │   │   ├── perf-uncore-events-clx.csv
│   │   │   │   ├── perf-uncore-events-hsw.csv
│   │   │   │   ├── perf-uncore-events-hsx.csv
│   │   │   │   ├── perf-uncore-events-icx.csv
│   │   │   │   ├── perf-uncore-events-ivb.csv
│   │   │   │   ├── perf-uncore-events-skx.csv
│   │   │   │   ├── perf-uncore-events-snb.csv
│   │   │   │   ├── perf-uncore-events-snr.csv
│   │   │   │   ├── perf-uncore-events-spr.csv
│   │   │   │   ├── platform_config.json
│   │   │   │   └── replacements_config.json
│   │   │   ├── create_perf_json.py
│   │   │   ├── metric.py
│   │   │   ├── perf_format_converter.py
│   │   │   └── unittesting/
│   │   │       ├── metric_test.py
│   │   │       ├── test_create_perf_json.py
│   │   │       ├── test_inputs/
│   │   │       │   └── test_input_1.json
│   │   │       └── test_perf_format_converter.py
│   │   ├── secure-pmu-access-1.01.csv
│   │   └── security.md
│   └── packages.config
├── portable.json.sample
├── source/
│   ├── CapFrameX/
│   │   ├── App.config
│   │   ├── App.xaml
│   │   ├── App.xaml.cs
│   │   ├── AppHelper.cs
│   │   ├── Bootstrapper.cs
│   │   ├── CapFrameX.csproj
│   │   ├── CapFrameXViewRegion.cs
│   │   ├── DebugMonitorWindow.xaml
│   │   ├── DebugMonitorWindow.xaml.cs
│   │   ├── Files/
│   │   │   └── bf0822e8-2e55-4b99-82ee-939d8ac2384e.bat
│   │   ├── HelpTexts/
│   │   │   └── ChartControls.rtf
│   │   ├── IconHelper.cs
│   │   ├── InMemorySink.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── Resources.Designer.cs
│   │   │   ├── Resources.resx
│   │   │   ├── Settings.Designer.cs
│   │   │   └── Settings.settings
│   │   ├── RegionManagerWrapper.cs
│   │   ├── Shell.xaml
│   │   ├── Shell.xaml.cs
│   │   ├── WindowStateTracker.cs
│   │   ├── app.manifest
│   │   ├── benchlab-service.items
│   │   └── portable.json.sample
│   ├── CapFrameX.ADLX/
│   │   ├── ADLXManager.cpp
│   │   ├── ADLXManager.h
│   │   ├── CapFrameX.ADLX.vcxproj
│   │   ├── CapFrameX.ADLX.vcxproj.filters
│   │   ├── SDK/
│   │   │   ├── ADLXHelper/
│   │   │   │   └── Windows/
│   │   │   │       ├── C/
│   │   │   │       │   ├── ADLXHelper.c
│   │   │   │       │   └── ADLXHelper.h
│   │   │   │       └── Cpp/
│   │   │   │           ├── ADLXHelper.cpp
│   │   │   │           └── ADLXHelper.h
│   │   │   ├── Include/
│   │   │   │   ├── ADLX.h
│   │   │   │   ├── ADLXDefines.h
│   │   │   │   ├── ADLXStructures.h
│   │   │   │   ├── ADLXVersion.h
│   │   │   │   ├── I3DSettings.h
│   │   │   │   ├── I3DSettings1.h
│   │   │   │   ├── I3DSettings2.h
│   │   │   │   ├── I3DSettings3.h
│   │   │   │   ├── IApplications.h
│   │   │   │   ├── IChangedEvent.h
│   │   │   │   ├── ICollections.h
│   │   │   │   ├── IDesktops.h
│   │   │   │   ├── IDisplay3DLUT.h
│   │   │   │   ├── IDisplayGamma.h
│   │   │   │   ├── IDisplayGamut.h
│   │   │   │   ├── IDisplaySettings.h
│   │   │   │   ├── IDisplays.h
│   │   │   │   ├── IDisplays1.h
│   │   │   │   ├── IDisplays2.h
│   │   │   │   ├── IDisplays3.h
│   │   │   │   ├── IGPUAutoTuning.h
│   │   │   │   ├── IGPUManualFanTuning.h
│   │   │   │   ├── IGPUManualGFXTuning.h
│   │   │   │   ├── IGPUManualPowerTuning.h
│   │   │   │   ├── IGPUManualVRAMTuning.h
│   │   │   │   ├── IGPUPresetTuning.h
│   │   │   │   ├── IGPUTuning.h
│   │   │   │   ├── IGPUTuning1.h
│   │   │   │   ├── II2C.h
│   │   │   │   ├── ILog.h
│   │   │   │   ├── IMultiMedia.h
│   │   │   │   ├── IPerformanceMonitoring.h
│   │   │   │   ├── IPerformanceMonitoring1.h
│   │   │   │   ├── IPerformanceMonitoring2.h
│   │   │   │   ├── IPerformanceMonitoring3.h
│   │   │   │   ├── IPowerTuning.h
│   │   │   │   ├── IPowerTuning1.h
│   │   │   │   ├── ISmartAccessMemory.h
│   │   │   │   ├── ISystem.h
│   │   │   │   ├── ISystem1.h
│   │   │   │   ├── ISystem2.h
│   │   │   │   └── ISystem3.h
│   │   │   └── Platform/
│   │   │       └── Windows/
│   │   │           ├── WinAPIs.c
│   │   │           └── WinAPIs.cpp
│   │   ├── dllmain.cpp
│   │   ├── framework.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CapFrameX.ApiInterface/
│   │   ├── CapFrameX.Remote.csproj
│   │   ├── CaptureController.cs
│   │   ├── JsonPayload/
│   │   │   └── StartCapturePayload.cs
│   │   ├── MetricsController.cs
│   │   ├── OSDController.cs
│   │   ├── OSDWebsocketModule.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SensorWebsocketModule.cs
│   │   ├── VersionController.cs
│   │   ├── WebserverFactory.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.CXServicex86/
│   │   ├── CSharpWrapper.cpp
│   │   ├── CSharpWrapper.h
│   │   ├── CapFrameX.CXServicex86.cpp
│   │   ├── CapFrameX.CXServicex86.vcxproj
│   │   └── CapFrameX.CXServicex86.vcxproj.filters
│   ├── CapFrameX.Capture.Contracts/
│   │   ├── CapFrameX.Capture.Contracts.csproj
│   │   ├── ICaptureService.cs
│   │   ├── IRecordDirectoryObserver.cs
│   │   ├── IServiceStateInfo.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Charts/
│   │   ├── Core40/
│   │   │   ├── AxisCore.cs
│   │   │   ├── AxisOrientation.cs
│   │   │   ├── AxisPosition.cs
│   │   │   ├── AxisSectionCore.cs
│   │   │   ├── AxisWindow.cs
│   │   │   ├── AxisWindows.cs
│   │   │   ├── BarLabelPosition.cs
│   │   │   ├── ChartFunctions.cs
│   │   │   ├── ChartPoint.cs
│   │   │   ├── ChartUpdater.cs
│   │   │   ├── ChartValues.cs
│   │   │   ├── Charting.cs
│   │   │   ├── Charts/
│   │   │   │   ├── CartesianChartCore.cs
│   │   │   │   ├── ChartCore.cs
│   │   │   │   └── PieChartCore.cs
│   │   │   ├── Configurations/
│   │   │   │   ├── CartesianMapper.cs
│   │   │   │   ├── FinancialMapper.cs
│   │   │   │   ├── GanttMapper.cs
│   │   │   │   ├── IPointEvaluator.cs
│   │   │   │   ├── Mappers.cs
│   │   │   │   ├── PieMapper.cs
│   │   │   │   ├── PolarMapper.cs
│   │   │   │   └── WeightedMapper.cs
│   │   │   ├── Core.csproj
│   │   │   ├── Core40.csproj.DotSettings
│   │   │   ├── DataLabelViewModel.cs
│   │   │   ├── DateAxisCore.cs
│   │   │   ├── DateAxisWindow.cs
│   │   │   ├── DateAxisWindows.cs
│   │   │   ├── DateSeparatorElementCore.cs
│   │   │   ├── Defaults/
│   │   │   │   ├── AxisLimits.cs
│   │   │   │   ├── DateTimePoint.cs
│   │   │   │   ├── GanttPoint.cs
│   │   │   │   ├── HeatPoint.cs
│   │   │   │   ├── OHLCPoint.cs
│   │   │   │   ├── ObservablePoint.cs
│   │   │   │   ├── ObservableValue.cs
│   │   │   │   ├── PolarPoint.cs
│   │   │   │   └── ScatterPoint.cs
│   │   │   ├── Definitions/
│   │   │   │   ├── Charts/
│   │   │   │   │   ├── IAxisSectionView.cs
│   │   │   │   │   ├── IAxisView.cs
│   │   │   │   │   ├── IAxisWindow.cs
│   │   │   │   │   ├── ICartesianChart.cs
│   │   │   │   │   ├── ICartesianVisualElement.cs
│   │   │   │   │   ├── IChartView.cs
│   │   │   │   │   ├── IDateAxisView.cs
│   │   │   │   │   ├── ILogarithmicAxisView.cs
│   │   │   │   │   ├── IPieChart.cs
│   │   │   │   │   ├── ISeparatorElementView.cs
│   │   │   │   │   ├── ISeparatorView.cs
│   │   │   │   │   └── IWindowAxisView.cs
│   │   │   │   ├── Points/
│   │   │   │   │   ├── IBezierPointView.cs
│   │   │   │   │   ├── IChartPointView.cs
│   │   │   │   │   ├── IHeatPointView.cs
│   │   │   │   │   ├── IOhlcPointView.cs
│   │   │   │   │   ├── IPieSlicePointView.cs
│   │   │   │   │   ├── IRectanglePointView.cs
│   │   │   │   │   ├── IScatterPointView.cs
│   │   │   │   │   └── IStepPointView.cs
│   │   │   │   └── Series/
│   │   │   │       ├── IAreaPoint.cs
│   │   │   │       ├── ICartesianSeries.cs
│   │   │   │       ├── IColumnSeriesView.cs
│   │   │   │       ├── IFinancialSeriesView.cs
│   │   │   │       ├── IGroupedStackedSeriesView.cs
│   │   │   │       ├── IHeatSeriesView.cs
│   │   │   │       ├── ILineSeriesView.cs
│   │   │   │       ├── IPieSeries.cs
│   │   │   │       ├── IPieSeriesView.cs
│   │   │   │       ├── IRowSeriesView.cs
│   │   │   │       ├── IScatterSeriesView.cs
│   │   │   │       ├── ISeriesView.cs
│   │   │   │       ├── IStackModelableSeriesView.cs
│   │   │   │       ├── IStackedAreaSeriesView.cs
│   │   │   │       ├── IStackedColumnSeriesView.cs
│   │   │   │       ├── IStackedRowSeriesView.cs
│   │   │   │       └── IVerticalStackedAreaSeriesView.cs
│   │   │   ├── Delegates.cs
│   │   │   ├── Dtos/
│   │   │   │   ├── BezierData.cs
│   │   │   │   ├── CoreColor.cs
│   │   │   │   ├── CoreGradientStop.cs
│   │   │   │   ├── CoreLimit.cs
│   │   │   │   ├── CoreMargin.cs
│   │   │   │   ├── CorePoint.cs
│   │   │   │   ├── CoreRectangle.cs
│   │   │   │   ├── CoreSize.cs
│   │   │   │   ├── LabelEvaluation.cs
│   │   │   │   ├── StackedSum.cs
│   │   │   │   └── TooltipDataViewModel.cs
│   │   │   ├── Events/
│   │   │   │   ├── Delegates.cs
│   │   │   │   ├── PreviewRangeChangedEventArgs.cs
│   │   │   │   └── RangeChangedEventArgs.cs
│   │   │   ├── Helpers/
│   │   │   │   ├── Extentions.cs
│   │   │   │   ├── LiveChartsException.cs
│   │   │   │   └── NoisyCollection.cs
│   │   │   ├── IChartValues.cs
│   │   │   ├── IObservableChartPoint.cs
│   │   │   ├── LegendLocation.cs
│   │   │   ├── LogarithmicAxisCore.cs
│   │   │   ├── Maps/
│   │   │   │   └── MapData.cs
│   │   │   ├── PanningOptions.cs
│   │   │   ├── PeriodUnits.cs
│   │   │   ├── PieLabelPosition.cs
│   │   │   ├── PointTracker.cs
│   │   │   ├── Properties/
│   │   │   │   └── AssemblyInfo.cs
│   │   │   ├── ScrollMode.cs
│   │   │   ├── SeparationState.cs
│   │   │   ├── SeparatorConfigurationCore.cs
│   │   │   ├── SeparatorElementCore.cs
│   │   │   ├── SeriesAlgorithms/
│   │   │   │   ├── CandleAlgorithm.cs
│   │   │   │   ├── ColumnAlgorithm.cs
│   │   │   │   ├── HeatAlgorithm.cs
│   │   │   │   ├── LineAlgorithm.cs
│   │   │   │   ├── OhlcAlgorithm.cs
│   │   │   │   ├── PieAlgorithm.cs
│   │   │   │   ├── RowAlgorithm.cs
│   │   │   │   ├── ScatterAlgorithm.cs
│   │   │   │   ├── StackedAreaAlgorithm.cs
│   │   │   │   ├── StackedColumnAlgorithm.cs
│   │   │   │   ├── StackedRowAlgorithm.cs
│   │   │   │   ├── StepLineAlgorithm.cs
│   │   │   │   ├── VerticalLineAlgorithm.cs
│   │   │   │   └── VerticalStackedAreaAlgorithm.cs
│   │   │   ├── SeriesCollection.cs
│   │   │   ├── SeriesOrientation.cs
│   │   │   ├── Seriesalgorithm.cs
│   │   │   ├── StackMode.cs
│   │   │   ├── TooltipSelectionMode.cs
│   │   │   ├── UpdaterState.cs
│   │   │   ├── VisualElementsCollection.cs
│   │   │   ├── WindowAxisCore.cs
│   │   │   ├── ZoomingOptions.cs
│   │   │   └── packages.config
│   │   ├── OxyPlot/
│   │   │   ├── Annotations/
│   │   │   │   ├── Annotation.cs
│   │   │   │   ├── AnnotationLayer.cs
│   │   │   │   ├── AnnotationTextOrientation.cs
│   │   │   │   ├── ArrowAnnotation.cs
│   │   │   │   ├── EllipseAnnotation.cs
│   │   │   │   ├── FunctionAnnotation.cs
│   │   │   │   ├── FunctionAnnotationType.cs
│   │   │   │   ├── ImageAnnotation.cs
│   │   │   │   ├── LineAnnotation.cs
│   │   │   │   ├── LineAnnotationType.cs
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── PathAnnotation.cs
│   │   │   │   ├── PointAnnotation.cs
│   │   │   │   ├── PolyLineAnnotation.cs
│   │   │   │   ├── PolygonAnnotation.cs
│   │   │   │   ├── RectangleAnnotation.cs
│   │   │   │   ├── ShapeAnnotation.cs
│   │   │   │   ├── TextAnnotation.cs
│   │   │   │   └── TextualAnnotation.cs
│   │   │   ├── Axes/
│   │   │   │   ├── AngleAxis.cs
│   │   │   │   ├── Axis.cs
│   │   │   │   ├── AxisChangeTypes.cs
│   │   │   │   ├── AxisChangedEventArgs.cs
│   │   │   │   ├── AxisLayer.cs
│   │   │   │   ├── AxisPosition.cs
│   │   │   │   ├── AxisUtilities.cs
│   │   │   │   ├── CategoryAxis.cs
│   │   │   │   ├── CategoryColorAxis.cs
│   │   │   │   ├── ColorAxisExtensions.cs
│   │   │   │   ├── DateTimeAxis.cs
│   │   │   │   ├── DateTimeIntervalType.cs
│   │   │   │   ├── IColorAxis.cs
│   │   │   │   ├── LinearAxis.cs
│   │   │   │   ├── LinearColorAxis.cs
│   │   │   │   ├── LogarithmicAxis.cs
│   │   │   │   ├── MagnitudeAxis.cs
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── RangeColorAxis.cs
│   │   │   │   ├── Rendering/
│   │   │   │   │   ├── AngleAxisRenderer.cs
│   │   │   │   │   ├── AxisRendererBase.cs
│   │   │   │   │   ├── HorizontalAndVerticalAxisRenderer.cs
│   │   │   │   │   └── MagnitudeAxisRenderer.cs
│   │   │   │   ├── TickStyle.cs
│   │   │   │   └── TimeSpanAxis.cs
│   │   │   ├── ClassDiagrams/
│   │   │   │   ├── Axes.cd
│   │   │   │   ├── PlotModel.cd
│   │   │   │   ├── Reporting.cd
│   │   │   │   └── Series.cd
│   │   │   ├── Foundation/
│   │   │   │   ├── CodeGenerator/
│   │   │   │   │   ├── CodeGenerationAttribute.cs
│   │   │   │   │   ├── CodeGenerator.cs
│   │   │   │   │   ├── CodeGeneratorStringExtensions.cs
│   │   │   │   │   └── ICodeGenerating.cs
│   │   │   │   ├── DataPoint.cs
│   │   │   │   ├── IDataPointProvider.cs
│   │   │   │   ├── IExporter.cs
│   │   │   │   ├── MarkerType.cs
│   │   │   │   ├── PlotLength.cs
│   │   │   │   └── PlotLengthUnit.cs
│   │   │   ├── Graphics/
│   │   │   │   ├── ControllerBase.cs
│   │   │   │   ├── ControllerExtensions.cs
│   │   │   │   ├── CursorType.cs
│   │   │   │   ├── DelegateViewCommand{T}.cs
│   │   │   │   ├── Element.cs
│   │   │   │   ├── ElementCollectionChangedEventArgs{T}.cs
│   │   │   │   ├── ElementCollection{T}.cs
│   │   │   │   ├── HitTestArguments.cs
│   │   │   │   ├── HitTestResult.cs
│   │   │   │   ├── IController.cs
│   │   │   │   ├── IView.cs
│   │   │   │   ├── IViewCommand.cs
│   │   │   │   ├── IViewCommand{T}.cs
│   │   │   │   ├── InputCommandBinding.cs
│   │   │   │   ├── ManipulatorBase.cs
│   │   │   │   ├── Model.MouseEvents.cs
│   │   │   │   ├── Model.cs
│   │   │   │   ├── SelectableElement.cs
│   │   │   │   ├── Selection.cs
│   │   │   │   ├── SelectionMode.cs
│   │   │   │   └── UIElement.cs
│   │   │   ├── Imaging/
│   │   │   │   ├── Bmp/
│   │   │   │   │   ├── BmpDecoder.cs
│   │   │   │   │   ├── BmpEncoder.cs
│   │   │   │   │   └── BmpEncoderOptions.cs
│   │   │   │   ├── Deflate/
│   │   │   │   │   ├── Arrays.cs
│   │   │   │   │   ├── BitReader.cs
│   │   │   │   │   ├── ByteBitReader.cs
│   │   │   │   │   ├── CanonicalCode.cs
│   │   │   │   │   ├── CircularDictionary.cs
│   │   │   │   │   ├── CodeTree.cs
│   │   │   │   │   ├── Deflate.cs
│   │   │   │   │   ├── InternalNode.cs
│   │   │   │   │   ├── Leaf.cs
│   │   │   │   │   ├── Node.cs
│   │   │   │   │   └── Readme.md
│   │   │   │   ├── IImageDecoder.cs
│   │   │   │   ├── IImageEncoder.cs
│   │   │   │   ├── ImageEncoderOptions.cs
│   │   │   │   ├── ImageFormat.cs
│   │   │   │   ├── Jpeg/
│   │   │   │   │   └── JpegDecoder.cs
│   │   │   │   ├── OxyImage.cs
│   │   │   │   ├── OxyImageInfo.cs
│   │   │   │   └── Png/
│   │   │   │       ├── PngDecoder.cs
│   │   │   │       ├── PngEncoder.cs
│   │   │   │       └── PngEncoderOptions.cs
│   │   │   ├── Input/
│   │   │   │   ├── Gestures/
│   │   │   │   │   ├── OxyInputGesture.cs
│   │   │   │   │   ├── OxyKeyGesture.cs
│   │   │   │   │   ├── OxyMouseDownGesture.cs
│   │   │   │   │   ├── OxyMouseEnterGesture.cs
│   │   │   │   │   ├── OxyMouseWheelGesture.cs
│   │   │   │   │   ├── OxyShakeGesture.cs
│   │   │   │   │   └── OxyTouchGesture.cs
│   │   │   │   ├── OxyKey.cs
│   │   │   │   ├── OxyModifierKeys.cs
│   │   │   │   └── OxyMouseButton.cs
│   │   │   ├── LibraryDoc.cs
│   │   │   ├── NamespaceDoc.cs
│   │   │   ├── OxyPlot.Core.nuspec
│   │   │   ├── OxyPlot.csproj
│   │   │   ├── OxyPlot.csproj.DotSettings
│   │   │   ├── OxyPlot.snk
│   │   │   ├── OxyPlot_NET.csproj
│   │   │   ├── OxyPlot_SL5.csproj
│   │   │   ├── Pdf/
│   │   │   │   ├── FontSubType.cs
│   │   │   │   ├── PdfExporter.cs
│   │   │   │   ├── PdfRenderContext.cs
│   │   │   │   ├── PdfWriter.cs
│   │   │   │   ├── PortableDocument.cs
│   │   │   │   ├── PortableDocumentExtensions.cs
│   │   │   │   ├── PortableDocumentFont.cs
│   │   │   │   ├── PortableDocumentFontFamily.cs
│   │   │   │   ├── PortableDocumentImage.cs
│   │   │   │   ├── PortableDocumentImageUtilities.cs
│   │   │   │   ├── ReadMe.txt
│   │   │   │   └── StandardFonts.cs
│   │   │   ├── PlotController/
│   │   │   │   ├── DelegatePlotCommand.cs
│   │   │   │   ├── EventArgs/
│   │   │   │   │   ├── OxyInputEventArgs.cs
│   │   │   │   │   ├── OxyKeyEventArgs.cs
│   │   │   │   │   ├── OxyMouseDownEventArgs.cs
│   │   │   │   │   ├── OxyMouseEventArgs.cs
│   │   │   │   │   ├── OxyMouseWheelEventArgs.cs
│   │   │   │   │   └── OxyTouchEventArgs.cs
│   │   │   │   ├── IPlotController.cs
│   │   │   │   ├── Manipulators/
│   │   │   │   │   ├── MouseManipulator.cs
│   │   │   │   │   ├── PanManipulator.cs
│   │   │   │   │   ├── PlotManipulator.cs
│   │   │   │   │   ├── TouchManipulator.cs
│   │   │   │   │   ├── TouchTrackerManipulator.cs
│   │   │   │   │   ├── TrackerHitResult.cs
│   │   │   │   │   ├── TrackerManipulator.cs
│   │   │   │   │   ├── ZoomRectangleManipulator.cs
│   │   │   │   │   └── ZoomStepManipulator.cs
│   │   │   │   ├── PlotCommands.cs
│   │   │   │   └── PlotController.cs
│   │   │   ├── PlotModel/
│   │   │   │   ├── IPlotElement.cs
│   │   │   │   ├── IPlotModel.cs
│   │   │   │   ├── PlotElement.cs
│   │   │   │   ├── PlotModel.Legends.cs
│   │   │   │   ├── PlotModel.Rendering.cs
│   │   │   │   ├── PlotModel.cs
│   │   │   │   └── TrackerEventArgs.cs
│   │   │   ├── PlotView/
│   │   │   │   └── IPlotView.cs
│   │   │   ├── Properties/
│   │   │   │   ├── AssemblyDescription.cs
│   │   │   │   └── AssemblyInfo.cs
│   │   │   ├── Rendering/
│   │   │   │   ├── FontWeights.cs
│   │   │   │   ├── HorizontalAlignment.cs
│   │   │   │   ├── LineJoin.cs
│   │   │   │   ├── LineStyle.cs
│   │   │   │   ├── LineStyleHelper.cs
│   │   │   │   ├── OxyColor.cs
│   │   │   │   ├── OxyColorExtensions.cs
│   │   │   │   ├── OxyColors.cs
│   │   │   │   ├── OxyPalette.cs
│   │   │   │   ├── OxyPalettes.cs
│   │   │   │   ├── OxyPen.cs
│   │   │   │   ├── OxyRect.cs
│   │   │   │   ├── OxySize.cs
│   │   │   │   ├── OxySizeExtensions.cs
│   │   │   │   ├── OxyThickness.cs
│   │   │   │   ├── RenderContext/
│   │   │   │   │   ├── IRenderContext.cs
│   │   │   │   │   ├── MathRenderingExtensions.cs
│   │   │   │   │   ├── RenderContextBase.cs
│   │   │   │   │   ├── RenderingExtensions.cs
│   │   │   │   │   └── XkcdRenderingDecorator.cs
│   │   │   │   ├── ScreenPoint.cs
│   │   │   │   ├── ScreenPointHelper.cs
│   │   │   │   ├── ScreenVector.cs
│   │   │   │   ├── Utilities/
│   │   │   │   │   ├── CanonicalSplineHelper.cs
│   │   │   │   │   ├── CohenSutherlandClipping.cs
│   │   │   │   │   ├── Decimator.cs
│   │   │   │   │   └── SutherlandHodgmanClipping.cs
│   │   │   │   └── VerticalAlignment.cs
│   │   │   ├── Reporting/
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── PlotModelExtensions.cs
│   │   │   │   ├── Report/
│   │   │   │   │   ├── Alignment.cs
│   │   │   │   │   ├── DrawingFigure.cs
│   │   │   │   │   ├── Equation.cs
│   │   │   │   │   ├── Figure.cs
│   │   │   │   │   ├── Header.cs
│   │   │   │   │   ├── HeaderHelper.cs
│   │   │   │   │   ├── Image.cs
│   │   │   │   │   ├── ItemsTable.cs
│   │   │   │   │   ├── ItemsTableField.cs
│   │   │   │   │   ├── Paragraph.cs
│   │   │   │   │   ├── ParagraphStyle.cs
│   │   │   │   │   ├── PlotFigure.cs
│   │   │   │   │   ├── PropertyTable.cs
│   │   │   │   │   ├── Report.cs
│   │   │   │   │   ├── ReportItem.cs
│   │   │   │   │   ├── ReportSection.cs
│   │   │   │   │   ├── ReportStyle.cs
│   │   │   │   │   ├── Table.cs
│   │   │   │   │   ├── TableCell.cs
│   │   │   │   │   ├── TableColumn.cs
│   │   │   │   │   ├── TableOfContents.cs
│   │   │   │   │   └── TableRow.cs
│   │   │   │   └── ReportWriters/
│   │   │   │       ├── HtmlReportWriter.cs
│   │   │   │       ├── IReportWriter.cs
│   │   │   │       ├── StringExtensions.cs
│   │   │   │       ├── TextReportWriter.cs
│   │   │   │       └── WikiReportWriter.cs
│   │   │   ├── Series/
│   │   │   │   ├── AreaSeries.cs
│   │   │   │   ├── BarSeries/
│   │   │   │   │   ├── BarItem.cs
│   │   │   │   │   ├── BarItemBase.cs
│   │   │   │   │   ├── BarSeries.cs
│   │   │   │   │   ├── BarSeriesBase.cs
│   │   │   │   │   ├── BarSeriesBase{T}.cs
│   │   │   │   │   ├── CategorizedItem.cs
│   │   │   │   │   ├── CategorizedSeries.cs
│   │   │   │   │   ├── ColumnItem.cs
│   │   │   │   │   ├── ColumnSeries.cs
│   │   │   │   │   ├── ErrorColumnItem.cs
│   │   │   │   │   ├── ErrorColumnSeries.cs
│   │   │   │   │   ├── IStackableSeries.cs
│   │   │   │   │   ├── IntervalBarItem.cs
│   │   │   │   │   ├── IntervalBarSeries.cs
│   │   │   │   │   ├── LabelPlacement.cs
│   │   │   │   │   ├── LinearBarSeries.cs
│   │   │   │   │   ├── RectangleBarItem.cs
│   │   │   │   │   ├── RectangleBarSeries.cs
│   │   │   │   │   ├── TornadoBarItem.cs
│   │   │   │   │   └── TornadoBarSeries.cs
│   │   │   │   ├── BoxPlotItem.cs
│   │   │   │   ├── BoxPlotSeries.cs
│   │   │   │   ├── ContourSeries.cs
│   │   │   │   ├── DataPointSeries.cs
│   │   │   │   ├── FinancialSeries/
│   │   │   │   │   ├── CandleStickAndVolumeSeries.cs
│   │   │   │   │   ├── CandleStickSeries.cs
│   │   │   │   │   ├── HighLowItem.cs
│   │   │   │   │   ├── HighLowSeries.cs
│   │   │   │   │   ├── OhlcvItem.cs
│   │   │   │   │   ├── OldCandleStickSeries.cs
│   │   │   │   │   ├── VolumeSeries.cs
│   │   │   │   │   └── VolumeStyle.cs
│   │   │   │   ├── FunctionSeries.cs
│   │   │   │   ├── HeatMapSeries.cs
│   │   │   │   ├── IScatterPointProvider.cs
│   │   │   │   ├── ITrackableSeries.cs
│   │   │   │   ├── ItemsSeries.cs
│   │   │   │   ├── LineLegendPosition.cs
│   │   │   │   ├── LineSeries.cs
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── PieSeries.cs
│   │   │   │   ├── PieSlice.cs
│   │   │   │   ├── ScatterErrorPoint.cs
│   │   │   │   ├── ScatterErrorSeries.cs
│   │   │   │   ├── ScatterPoint.cs
│   │   │   │   ├── ScatterSeries.cs
│   │   │   │   ├── ScatterSeries{T}.cs
│   │   │   │   ├── Series.cs
│   │   │   │   ├── StairStepSeries.cs
│   │   │   │   ├── StemSeries.cs
│   │   │   │   ├── ThreeColorLineSeries.cs
│   │   │   │   ├── TwoColorAreaSeries.cs
│   │   │   │   ├── TwoColorLineSeries.cs
│   │   │   │   └── XYAxisSeries.cs
│   │   │   ├── Svg/
│   │   │   │   ├── SvgExporter.cs
│   │   │   │   ├── SvgRenderContext.cs
│   │   │   │   └── SvgWriter.cs
│   │   │   └── Utilities/
│   │   │       ├── ArrayBuilder.cs
│   │   │       ├── ArrayExtensions.cs
│   │   │       ├── BinaryReaderExtensions.cs
│   │   │       ├── ComparerHelper.cs
│   │   │       ├── Conrec.cs
│   │   │       ├── FractionHelper.cs
│   │   │       ├── HashCodeBuilder.cs
│   │   │       ├── ListBuilder{T}.cs
│   │   │       ├── ReflectionPath.cs
│   │   │       ├── StreamExtensions.cs
│   │   │       ├── StringHelper.cs
│   │   │       ├── TypeExtensions.cs
│   │   │       └── XmlWriterBase.cs
│   │   ├── OxyPlot.Wpf/
│   │   │   ├── Annotations/
│   │   │   │   ├── Annotation.cs
│   │   │   │   ├── ArrowAnnotation.cs
│   │   │   │   ├── EllipseAnnotation.cs
│   │   │   │   ├── FunctionAnnotation.cs
│   │   │   │   ├── LineAnnotation.cs
│   │   │   │   ├── PathAnnotation.cs
│   │   │   │   ├── PointAnnotation.cs
│   │   │   │   ├── PolygonAnnotation.cs
│   │   │   │   ├── PolylineAnnotation.cs
│   │   │   │   ├── RectangleAnnotation.cs
│   │   │   │   ├── ShapeAnnotation.cs
│   │   │   │   ├── TextAnnotation.cs
│   │   │   │   └── TextualAnnotation.cs
│   │   │   ├── Axes/
│   │   │   │   ├── AngleAxis.cs
│   │   │   │   ├── Axis.cs
│   │   │   │   ├── CategoryAxis.cs
│   │   │   │   ├── DateTimeAxis.cs
│   │   │   │   ├── LinearAxis.cs
│   │   │   │   ├── LinearColorAxis.cs
│   │   │   │   ├── LogarithmicAxis.cs
│   │   │   │   ├── MagnitudeAxis.cs
│   │   │   │   └── TimeSpanAxis.cs
│   │   │   ├── CanvasRenderContext.cs
│   │   │   ├── Converters/
│   │   │   │   ├── OxyColorConverter.cs
│   │   │   │   └── ThicknessConverter.cs
│   │   │   ├── ExporterExtensions.cs
│   │   │   ├── Extensions/
│   │   │   │   └── DataPointExtension.cs
│   │   │   ├── MoreColors.cs
│   │   │   ├── NamespaceDoc.cs
│   │   │   ├── OxyPlot.Wpf.csproj
│   │   │   ├── OxyPlot.Wpf.csproj.DotSettings
│   │   │   ├── OxyPlot.Wpf.nuspec
│   │   │   ├── OxyPlot.Wpf.snk
│   │   │   ├── OxyPlot.Wpf_NET.csproj
│   │   │   ├── OxyPlot.Wpf_NET40.csproj.DotSettings
│   │   │   ├── Plot.Properties.cs
│   │   │   ├── Plot.cs
│   │   │   ├── PlotBase.Events.cs
│   │   │   ├── PlotBase.Export.cs
│   │   │   ├── PlotBase.Properties.cs
│   │   │   ├── PlotBase.cs
│   │   │   ├── PlotCommands.cs
│   │   │   ├── PlotView.cs
│   │   │   ├── PngExporter.cs
│   │   │   ├── Properties/
│   │   │   │   ├── AssemblyDescription.cs
│   │   │   │   ├── AssemblyInfo.cs
│   │   │   │   ├── Resources.Designer.cs
│   │   │   │   ├── Resources.resx
│   │   │   │   ├── Settings.Designer.cs
│   │   │   │   └── Settings.settings
│   │   │   ├── Reporting/
│   │   │   │   └── FlowDocumentReportWriter.cs
│   │   │   ├── Series/
│   │   │   │   ├── AreaSeries.cs
│   │   │   │   ├── BarSeries/
│   │   │   │   │   ├── BarSeries.cs
│   │   │   │   │   ├── BarSeriesBase.cs
│   │   │   │   │   ├── BarSeriesBase{T}.cs
│   │   │   │   │   ├── CategorizedSeries.cs
│   │   │   │   │   ├── ColumnSeries.cs
│   │   │   │   │   └── LinearBarSeries.cs
│   │   │   │   ├── BoxPlotSeries.cs
│   │   │   │   ├── DataPointSeries.cs
│   │   │   │   ├── HeatMapSeries.cs
│   │   │   │   ├── ItemsSeries.cs
│   │   │   │   ├── LineSeries.cs
│   │   │   │   ├── PieSeries.cs
│   │   │   │   ├── ScatterErrorSeries.cs
│   │   │   │   ├── ScatterSeries.cs
│   │   │   │   ├── ScatterSeries{T}.cs
│   │   │   │   ├── Series.cs
│   │   │   │   ├── StairStepSeries.cs
│   │   │   │   ├── ThreeColorLineSeries.cs
│   │   │   │   ├── TwoColorAreaSeries.cs
│   │   │   │   ├── TwoColorLineSeries.cs
│   │   │   │   └── XYAxisSeries.cs
│   │   │   ├── SvgExporter.cs
│   │   │   ├── TextMeasurementMethod.cs
│   │   │   ├── Themes/
│   │   │   │   └── Generic.xaml
│   │   │   ├── Tracker/
│   │   │   │   ├── TrackerControl.cs
│   │   │   │   └── TrackerDefinition.cs
│   │   │   ├── Utilities/
│   │   │   │   ├── ConverterExtensions.cs
│   │   │   │   └── Keyboard.cs
│   │   │   ├── XamlExporter.cs
│   │   │   └── XpsExporter.cs
│   │   └── WpfView/
│   │       ├── AngularGauge.cs
│   │       ├── AngularSection.cs
│   │       ├── AxesCollection.cs
│   │       ├── Axis.cs
│   │       ├── AxisSection.cs
│   │       ├── AxisWindowCollection.cs
│   │       ├── CandleSeries.cs
│   │       ├── CartesianChart.cs
│   │       ├── Charts/
│   │       │   └── Base/
│   │       │       └── Chart.cs
│   │       ├── ColorsCollection.cs
│   │       ├── ColumnSeries.cs
│   │       ├── Components/
│   │       │   ├── AxisSeparatorElement.cs
│   │       │   ├── ChartUpdater.cs
│   │       │   ├── Converters.cs
│   │       │   ├── DefaultXamlReader.cs
│   │       │   ├── IFondeable.cs
│   │       │   ├── ThreadAccess.cs
│   │       │   └── TooltipDto.cs
│   │       ├── Converters/
│   │       │   └── TypeConverters.cs
│   │       ├── DateAxis.cs
│   │       ├── DefaultAxes.cs
│   │       ├── DefaultGeoMapTooltip.xaml
│   │       ├── DefaultGeoMapTooltip.xaml.cs
│   │       ├── DefaultGeometry.cs
│   │       ├── DefaultLegend.xaml
│   │       ├── DefaultLegend.xaml.cs
│   │       ├── DefaultTooltip.xaml
│   │       ├── DefaultTooltip.xaml.cs
│   │       ├── Desktop.csproj.DotSettings
│   │       ├── Extentions.cs
│   │       ├── FinancialColoringRule.cs
│   │       ├── Gauge.cs
│   │       ├── GeoMap.cs
│   │       ├── HeatColorRange.xaml
│   │       ├── HeatColorRange.xaml.cs
│   │       ├── HeatSeries.cs
│   │       ├── IChartLegend.cs
│   │       ├── IChartTooltip.cs
│   │       ├── LineSegmentSplitter.cs
│   │       ├── LineSeries.cs
│   │       ├── LiveChartsDesktop.csproj.DotSettings
│   │       ├── LiveChartsWPF.csproj.DotSettings
│   │       ├── LogarithmicAxis.cs
│   │       ├── Maps/
│   │       │   └── MapResolver.cs
│   │       ├── OhlcSeries.cs
│   │       ├── PieChart.cs
│   │       ├── PieSeries.cs
│   │       ├── Points/
│   │       │   ├── CandlePointView.cs
│   │       │   ├── ColumnPointView.cs
│   │       │   ├── HeatPoint.cs
│   │       │   ├── HorizontalBezierPointView.cs
│   │       │   ├── OhlcPointView.cs
│   │       │   ├── PiePointView.cs
│   │       │   ├── PieSlice.cs
│   │       │   ├── PointView.cs
│   │       │   ├── RowPointView.cs
│   │       │   ├── ScatterPointView.cs
│   │       │   ├── StepLinePointView.cs
│   │       │   └── VerticalBezierPointView.cs
│   │       ├── Properties/
│   │       │   ├── AssemblyInfo.cs
│   │       │   ├── Resources.Designer.cs
│   │       │   ├── Resources.resx
│   │       │   ├── Settings.Designer.cs
│   │       │   └── Settings.settings
│   │       ├── RowSeries.cs
│   │       ├── ScatterSeries.cs
│   │       ├── SectionsCollection.cs
│   │       ├── Separator.cs
│   │       ├── Series.cs
│   │       ├── StackedAreaSeries.cs
│   │       ├── StackedColumnSeries.cs
│   │       ├── StackedRowSeries.cs
│   │       ├── StepLineSeries.cs
│   │       ├── Themes/
│   │       │   ├── Colors/
│   │       │   │   ├── black.xaml
│   │       │   │   ├── blue.xaml
│   │       │   │   ├── material.xaml
│   │       │   │   ├── metro.xaml
│   │       │   │   └── white.xaml
│   │       │   ├── Size/
│   │       │   │   ├── l.xaml
│   │       │   │   ├── m.xaml
│   │       │   │   └── s.xaml
│   │       │   ├── Weight/
│   │       │   │   ├── bold.xaml
│   │       │   │   ├── light.xaml
│   │       │   │   └── normal.xaml
│   │       │   └── base.xaml
│   │       ├── VerticalLineSeries.cs
│   │       ├── VerticalStackedAreaSeries.cs
│   │       ├── VisualElement.cs
│   │       ├── WindowAxis.cs
│   │       ├── WpfView.csproj
│   │       ├── WpfView.csproj.DotSettings
│   │       ├── WpfView.nuspec
│   │       ├── app.config
│   │       ├── docs.xml
│   │       ├── install.ps1
│   │       └── wpf.docs
│   ├── CapFrameX.Configuration/
│   │   ├── AppDependencyChecker.cs
│   │   ├── CapFrameX.Configuration.csproj
│   │   ├── CapFrameXConfiguration.cs
│   │   ├── ConfigurationProvider.cs
│   │   ├── EtwServiceChecker.cs
│   │   ├── ISettingsStorage.cs
│   │   ├── JsonSettingsStorage.cs
│   │   ├── PathService.cs
│   │   ├── PathServiceProvider.cs
│   │   ├── PortableConfig.cs
│   │   ├── PortableModeDetector.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Constants/
│   │   └── CapFrameX.Constants.csproj
│   ├── CapFrameX.Contracts/
│   │   ├── Aggregation/
│   │   │   └── IAggregationEntry.cs
│   │   ├── CapFrameX.Contracts.csproj
│   │   ├── Cloud/
│   │   │   └── ICloudEntry.cs
│   │   ├── Configuration/
│   │   │   ├── EDownSamplingMode.cs
│   │   │   ├── IAppConfiguration.cs
│   │   │   ├── IPathService.cs
│   │   │   └── IPmdServiceConfiguration.cs
│   │   ├── Data/
│   │   │   ├── ESystemInfoTertiaryStatus.cs
│   │   │   ├── IAppVersionProvider.cs
│   │   │   ├── ICloudManager.cs
│   │   │   ├── IFileRecordInfo.cs
│   │   │   ├── IRecordManager.cs
│   │   │   ├── ISystemInfo.cs
│   │   │   ├── ISystemInfoEntry.cs
│   │   │   └── IWebVersionProvider.cs
│   │   ├── Logging/
│   │   │   ├── ELogMessageType.cs
│   │   │   ├── ILogEntry.cs
│   │   │   └── ILogEntryManager.cs
│   │   ├── MVVM/
│   │   │   ├── IMouseEventHandler.cs
│   │   │   └── IShell.cs
│   │   ├── Overlay/
│   │   │   ├── EOverlayEntryConfig.cs
│   │   │   ├── EOverlayEntryType.cs
│   │   │   ├── EOverlayTemplate.cs
│   │   │   ├── IOverlayEntry.cs
│   │   │   ├── IOverlayEntryCore.cs
│   │   │   ├── IOverlayEntryFormatChange.cs
│   │   │   ├── IOverlayEntryProvider.cs
│   │   │   ├── IOverlayService.cs
│   │   │   └── IOverlayTemplateService.cs
│   │   ├── PMD/
│   │   │   └── EPmdDriverStatus.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── RTSS/
│   │   │   └── IRTSSService.cs
│   │   ├── Sensor/
│   │   │   ├── EHardwareType.cs
│   │   │   ├── IPmcReaderSensorPlugin.cs
│   │   │   ├── ISensorEntry.cs
│   │   │   ├── ISensorEntryProvider.cs
│   │   │   ├── ISensorService.cs
│   │   │   └── SensorIdentifierHelper.cs
│   │   ├── UpdateCheck/
│   │   │   └── IUpdateCheck.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.CustomInstallerActions/
│   │   ├── CapFrameX.CustomInstallerActions.csproj
│   │   ├── CustomAction.config
│   │   ├── InstallerCustomActions.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── packages.config
│   ├── CapFrameX.Data/
│   │   ├── AggregationEntry.cs
│   │   ├── AppVersionProvider.cs
│   │   ├── ApplicationState.cs
│   │   ├── AtomicTime.cs
│   │   ├── CapFrameX.Data.csproj
│   │   ├── CaptureManager.cs
│   │   ├── CloudEntry.cs
│   │   ├── CloudManager.cs
│   │   ├── ComparisonRecordInfo.cs
│   │   ├── ECaptureFileMode.cs
│   │   ├── EHardwareInfoSource.cs
│   │   ├── FileRecordInfo.cs
│   │   ├── IRecordDataServer.cs
│   │   ├── ImageExport.cs
│   │   ├── LocalRecordDataServer.cs
│   │   ├── Logging/
│   │   │   ├── LogEntry.cs
│   │   │   └── LogEntryManager.cs
│   │   ├── LoginManager.cs
│   │   ├── OverlayEntryFormatChange.cs
│   │   ├── ProcessList/
│   │   │   └── Processes.json
│   │   ├── ProcessList.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── RecordDirectoryObserver.cs
│   │   ├── RecordManager.cs
│   │   ├── ReportInfo.cs
│   │   ├── SortKeyComparer.cs
│   │   ├── SoundManager.cs
│   │   ├── SystemInfoEntry.cs
│   │   ├── WebVersionProvider.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Data.Session/
│   │   ├── CapFrameX.Data.Session.csproj
│   │   ├── Classes/
│   │   │   ├── EPresentMode.cs
│   │   │   ├── Session.cs
│   │   │   ├── SessionCaptureData.cs
│   │   │   ├── SessionInfo.cs
│   │   │   ├── SessionRun.cs
│   │   │   ├── SessionSensorData.cs
│   │   │   └── SessionSensorData2.cs
│   │   ├── Contracts/
│   │   │   ├── ISession.cs
│   │   │   ├── ISessionCaptureData.cs
│   │   │   ├── ISessionInfo.cs
│   │   │   ├── ISessionRun.cs
│   │   │   ├── ISessionSensorData.cs
│   │   │   ├── ISessionSensorData2.cs
│   │   │   └── ISessionSensorEntry.cs
│   │   └── Converters/
│   │       ├── BoolToZeroOrOneConverter.cs
│   │       ├── ConcreteTypeConverter.cs
│   │       ├── SessionSensorData2TypeConverter.cs
│   │       ├── SessionSensorDataConverter.cs
│   │       └── VersionConverter.cs
│   ├── CapFrameX.EventAggregation/
│   │   ├── CapFrameX.EventAggregation.csproj
│   │   ├── Messages/
│   │   │   ├── AppMessages.cs
│   │   │   └── ViewMessages.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── app.config
│   ├── CapFrameX.Extensions/
│   │   ├── CapFrameX.Extensions.csproj
│   │   ├── CollectionExtensions.cs
│   │   ├── Comparer.cs
│   │   ├── ContainerExtensions.cs
│   │   ├── HttpRequestHeadersExtensions.cs
│   │   ├── LinqExtensions.cs
│   │   ├── ObjectCopier.cs
│   │   ├── ObjectExtensions.cs
│   │   ├── ObservableCollectionExtensions.cs
│   │   ├── ObservableExtensions.cs
│   │   ├── ProcessHelper.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── ReflectionExtensions.cs
│   │   ├── StringExtensions.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Extensions.NetStandard/
│   │   ├── Attributes/
│   │   │   └── ShortDescriptionAttribute.cs
│   │   ├── CapFrameX.Extensions.NetStandard.csproj
│   │   ├── EnumExtensions.cs
│   │   └── JTokenExtensions.cs
│   ├── CapFrameX.Hardware.Controller/
│   │   ├── CapFrameX.Hardware.Controller.csproj
│   │   ├── IThreadAffinityController.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── ThreadAffinityController.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Hotkey/
│   │   ├── CXHotkey.cs
│   │   ├── CXHotkeyCombination.cs
│   │   ├── CapFrameX.Hotkey.csproj
│   │   ├── Chord.cs
│   │   ├── HotkeyDictionaryBuilder.cs
│   │   ├── KeyCombinationExtensions.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Hwinfo/
│   │   ├── CapFrameX.Hwinfo.vcxproj
│   │   ├── CapFrameX.Hwinfo.vcxproj.filters
│   │   ├── TimeStampCounterFrequency.cpp
│   │   ├── TimeStampCounterFrequency.h
│   │   ├── cApiWrapper.cpp
│   │   ├── cApiWrapper.h
│   │   ├── dllmain.cpp
│   │   ├── framework.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CapFrameX.IGCL/
│   │   ├── CapFrameX.IGCL.vcxproj
│   │   ├── CapFrameX.IGCL.vcxproj.filters
│   │   ├── IGCLManager.cpp
│   │   ├── IGCLManager.h
│   │   ├── cApiWrapper.cpp
│   │   ├── cApiWrapper.h
│   │   ├── dllmain.cpp
│   │   ├── framework.h
│   │   ├── igcl_api.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CapFrameX.InterprocessCommunication/
│   │   ├── CapFrameX.InterprocessCommunication.csproj
│   │   ├── Constants.cs
│   │   ├── Contracts/
│   │   │   ├── IReceiver.cs
│   │   │   └── ISender.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── Receiver.cs
│   │   ├── Sender.cs
│   │   ├── StreamString.cs
│   │   └── packages.config
│   ├── CapFrameX.MVVM/
│   │   ├── AttachedProperties/
│   │   │   └── MouseHelper.cs
│   │   ├── BindingProxy.cs
│   │   ├── CapFrameX.MVVM.csproj
│   │   ├── Converter/
│   │   │   ├── AddSubsctractConverter.cs
│   │   │   ├── AddValueConverter.cs
│   │   │   ├── BoolToVisibilityConverter.cs
│   │   │   ├── EnumDescriptionConverter.cs
│   │   │   ├── EnumShortDescriptionConverter.cs
│   │   │   ├── InequalityToValueConverter.cs
│   │   │   ├── InvertBoolConverter.cs
│   │   │   ├── ModeColorConverter.cs
│   │   │   ├── ModeDescriptionConverter.cs
│   │   │   ├── NegateBoolConverter.cs
│   │   │   ├── PlusHalfDifferenceConverter.cs
│   │   │   ├── PmdStatusColorConverter.cs
│   │   │   ├── SelectedAreaWidthRatioConverter.cs
│   │   │   ├── StringColorConverter.cs
│   │   │   └── ZoomingModeConverter.cs
│   │   ├── Dialogs/
│   │   │   ├── ConditionalMessageDialog.xaml
│   │   │   ├── ConditionalMessageDialog.xaml.cs
│   │   │   ├── CreateFolderDialog.xaml
│   │   │   ├── CreateFolderDialog.xaml.cs
│   │   │   ├── EditingDialog.xaml
│   │   │   ├── EditingDialog.xaml.cs
│   │   │   ├── MessageDialog.xaml
│   │   │   ├── MessageDialog.xaml.cs
│   │   │   ├── ResetOverlayConfigDialog.xaml
│   │   │   └── ResetOverlayConfigDialog.xaml.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SelectionChangedBehaviour.cs
│   │   ├── SetPropertyAction.cs
│   │   ├── SliderValueChangedBehaviour.cs
│   │   ├── Validation/
│   │   │   ├── HotkeyValidationRule.cs
│   │   │   ├── IntegerValidationRule.cs
│   │   │   └── NotEmptyValidationRule.cs
│   │   ├── WpfExtensions.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Mcp/
│   │   ├── Attributes/
│   │   │   ├── McpServerToolAttribute.cs
│   │   │   └── McpServerToolTypeAttribute.cs
│   │   ├── CapFrameX.Mcp.csproj
│   │   ├── McpModule.cs
│   │   ├── Protocol/
│   │   │   ├── InitializeResult.cs
│   │   │   ├── JsonRpcMessages.cs
│   │   │   ├── McpProtocol.cs
│   │   │   └── ToolMessages.cs
│   │   ├── Schema/
│   │   │   └── JsonSchemaBuilder.cs
│   │   └── Tools/
│   │       ├── BottleneckTools.cs
│   │       ├── CaptureStatusTools.cs
│   │       ├── CaptureTimelineTools.cs
│   │       ├── ComparisonTools.cs
│   │       ├── DiagnosticsTools.cs
│   │       ├── Dtos.cs
│   │       ├── LogReader.cs
│   │       ├── McpToolDescriptor.cs
│   │       ├── McpToolRegistry.cs
│   │       ├── MetricsTools.cs
│   │       ├── PingTools.cs
│   │       ├── RecordTools.cs
│   │       ├── SearchTools.cs
│   │       ├── SensorTools.cs
│   │       └── SystemInfoTools.cs
│   ├── CapFrameX.Monitoring.Contracts/
│   │   ├── CapFrameX.Monitoring.Contracts.csproj
│   │   ├── IProcessService.cs
│   │   ├── ISensorConfig.cs
│   │   ├── ProcessServiceProvider.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Overlay/
│   │   ├── CapFrameX.Overlay.csproj
│   │   ├── EOutlierHandling.cs
│   │   ├── OverlayEntryCore.cs
│   │   ├── OverlayEntryPersistence.cs
│   │   ├── OverlayEntryProvider.cs
│   │   ├── OverlayEntryWrapper.cs
│   │   ├── OverlayService.cs
│   │   ├── OverlayTemplateService.cs
│   │   ├── OverlayUtils.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.PMD/
│   │   ├── Benchlab/
│   │   │   ├── BenchlabMetricsManager.cs
│   │   │   ├── BenchlabService.cs
│   │   │   ├── IBenchlabService.cs
│   │   │   └── Sensor.cs
│   │   ├── CapFrameX.PMD.csproj
│   │   ├── PmdAnalysisChartManager.cs
│   │   ├── PmdMetricSet.cs
│   │   ├── Powenetics/
│   │   │   ├── IPoweneticsDriver.cs
│   │   │   ├── IPoweneticsService.cs
│   │   │   ├── PoweneticsChannel.cs
│   │   │   ├── PoweneticsChannelType.cs
│   │   │   ├── PoweneticsData.cs
│   │   │   ├── PoweneticsDataProcessing.cs
│   │   │   ├── PoweneticsMetricsManager.cs
│   │   │   ├── PoweneticsService.cs
│   │   │   └── PoweneticsUSBDriver.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.PresentMonInterface/
│   │   ├── CapFrameX.PresentMonInterface.csproj
│   │   ├── CaptureServiceConfiguration.cs
│   │   ├── CaptureServiceInfo.cs
│   │   ├── IOnlineMetricService.cs
│   │   ├── OnlineMetricService.cs
│   │   ├── OnlinePmdMetrics.cs
│   │   ├── PresentMon/
│   │   │   └── license.txt
│   │   ├── PresentMonCaptureService.cs
│   │   ├── PresentMonServiceConfiguration.cs
│   │   ├── PresentMonStartInfo.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.RTSSIntegration/
│   │   ├── CapFrameX.RTSSIntegration.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── RTSSService.cs
│   │   ├── RefreshTray.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.RTSSInterface/
│   │   ├── CapFrameX.RTSSInterface.cpp
│   │   ├── CapFrameX.RTSSInterface.vcxproj
│   │   ├── CapFrameX.RTSSInterface.vcxproj.filters
│   │   ├── GroupedString.cpp
│   │   ├── GroupedString.h
│   │   ├── Include/
│   │   │   ├── EncoderPluginTypes.h
│   │   │   ├── RTSSHooksTypes.h
│   │   │   └── RTSSSharedMemory.h
│   │   ├── OverlayEntry.cpp
│   │   ├── OverlayEntry.h
│   │   ├── RTSSCSharpWrapper.cpp
│   │   ├── RTSSCSharpWrapper.h
│   │   ├── RTSSCoreControl.cpp
│   │   ├── RTSSCoreControl.h
│   │   ├── RTSSHooksInterface.cpp
│   │   ├── RTSSHooksInterface.h
│   │   ├── RTSSProfileInterface.cpp
│   │   ├── RTSSProfileInterface.h
│   │   ├── dllmain.cpp
│   │   ├── stdafx.cpp
│   │   ├── stdafx.h
│   │   └── targetver.h
│   ├── CapFrameX.Sensor/
│   │   ├── CapFrameX.Sensor.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SensorConfig.cs
│   │   ├── SensorEntry.cs
│   │   ├── SensorEntryProvider.cs
│   │   ├── SensorEntryWrapper.cs
│   │   ├── SensorService.cs
│   │   ├── SessionSensorDataLive.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Sensor.Reporting/
│   │   ├── CapFrameX.Sensor.Reporting.csproj
│   │   ├── Contracts/
│   │   │   └── ISensorReportItem.cs
│   │   ├── Data/
│   │   │   └── SensorReportItem.cs
│   │   ├── EReportSensorName.cs
│   │   └── SensorReport.cs
│   ├── CapFrameX.Statistics.NetStandard/
│   │   ├── CapFrameX.Statistics.NetStandard.csproj
│   │   ├── CircularBuffer.cs
│   │   ├── Contracts/
│   │   │   ├── EFilterMode.cs
│   │   │   ├── EInputLagType.cs
│   │   │   ├── ELShapeMetrics.cs
│   │   │   ├── EMetric.cs
│   │   │   ├── ERemoveOutlierMethod.cs
│   │   │   ├── IFrameTimeAnalyzer.cs
│   │   │   ├── IFrametimeStatisticProviderOptions.cs
│   │   │   ├── IMetricAnalysis.cs
│   │   │   └── IStatisticProvider.cs
│   │   ├── FrametimeAnalyzer.cs
│   │   ├── FrametimeStatisticProvider.cs
│   │   ├── IntervalTimeAverageFilter.cs
│   │   ├── MetricAnalysis.cs
│   │   ├── Point.cs
│   │   ├── SampleBasedMovingAverage.cs
│   │   ├── SavitzkyGolayFilter.cs
│   │   ├── SessionExtensions.cs
│   │   └── TimeBasedMovingAverage.cs
│   ├── CapFrameX.Statistics.PlotBuilder/
│   │   ├── CapFrameX.Statistics.PlotBuilder.csproj
│   │   ├── Constants.cs
│   │   ├── Contracts/
│   │   │   ├── EPlotAxis.cs
│   │   │   └── IPlotSettings.cs
│   │   ├── FpsGraphPlotBuilder.cs
│   │   ├── FrametimeDistributionPlotBuilder.cs
│   │   ├── FrametimePlotBuilder.cs
│   │   ├── LineSeries.cs
│   │   └── PlotBuilder.cs
│   ├── CapFrameX.SystemInfo.NetStandard/
│   │   ├── CapFrameX.SystemInfo.NetStandard.csproj
│   │   └── SystemInfo.cs
│   ├── CapFrameX.Test/
│   │   ├── CapFrameX.Test.csproj
│   │   ├── Data/
│   │   │   ├── CaptureManagerTest.cs
│   │   │   └── FileRecordInfoTest.cs
│   │   ├── Extensions/
│   │   │   ├── ObservableExtensionsTest.cs
│   │   │   └── StringExtensionsTest.cs
│   │   ├── Integration/
│   │   │   └── PresentMonIntegrationTest.cs
│   │   ├── Mocks/
│   │   │   ├── MockBenchlabService.cs
│   │   │   ├── MockCaptureService.cs
│   │   │   ├── MockPoweneticsService.cs
│   │   │   ├── MockRecordManager.cs
│   │   │   └── MockSensorService.cs
│   │   ├── PMD/
│   │   │   └── OfflineDataProcessingTest.cs
│   │   ├── PresentMonInterface/
│   │   │   └── SystemInfoTest.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── Sensor/
│   │   │   ├── ComputerTest.cs
│   │   │   ├── OverlayConfigIntelIntel.json
│   │   │   ├── OverlayConfigMigrationIntelIntelTest.cs
│   │   │   ├── OverlayConfigMigrationNvAmdTest.cs
│   │   │   ├── OverlayConfigMigrationNvMobileIntelTest.cs
│   │   │   ├── OverlayConfigMigrationNvMobileIntelTest.json
│   │   │   ├── OverlayConfigNvAmd.json
│   │   │   ├── PantherLakeVoltageTest.cs
│   │   │   ├── SensorAggregationStableIdTest.cs
│   │   │   └── StableIdMigrationTest.cs
│   │   ├── Statistics/
│   │   │   ├── CircularBufferTest.cs
│   │   │   └── FrametimeStatisticProviderTest.cs
│   │   ├── TestHelper.cs
│   │   ├── TestRecordFiles/
│   │   │   ├── CapFrameXFileWithHeader.csv
│   │   │   ├── CustomFilenameWithoutComment.csv
│   │   │   ├── CustomFilenameWithoutMetaDataInFilename.csv
│   │   │   ├── InvalidColumnFile.csv
│   │   │   ├── OCAT-MetroExodus.exe-2019-02-20T101522.csv
│   │   │   ├── PresentMonTestOutputFilename.csv
│   │   │   └── ShortFile.csv
│   │   ├── Updater/
│   │   │   └── UpdateCheckTest.cs
│   │   ├── ViewModel/
│   │   │   └── CaptureViewModelTest.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Updater/
│   │   ├── CapFrameX.Updater.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── UpdateCheck.cs
│   │   └── app.config
│   ├── CapFrameX.View/
│   │   ├── AggregationView.xaml
│   │   ├── AggregationView.xaml.cs
│   │   ├── CapFrameX.View.csproj
│   │   ├── CaptureView.xaml
│   │   ├── CaptureView.xaml.cs
│   │   ├── CloudView.xaml
│   │   ├── CloudView.xaml.cs
│   │   ├── CollectionViewUtils.cs
│   │   ├── ColorbarView.xaml
│   │   ├── ColorbarView.xaml.cs
│   │   ├── ComparisonDataView.xaml
│   │   ├── ComparisonDataView.xaml.cs
│   │   ├── ComparisonView.xaml
│   │   ├── ComparisonView.xaml.cs
│   │   ├── ControlView.xaml
│   │   ├── ControlView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── CXColorPicker.cs
│   │   │   ├── CustomPanManipulator.cs
│   │   │   ├── CustomRangeSlider.cs
│   │   │   ├── CustomZoomStepManipulator.cs
│   │   │   ├── EAxisDescription.cs
│   │   │   ├── FpsGraphControl.xaml
│   │   │   ├── FpsGraphControl.xaml.cs
│   │   │   ├── FrametimeDistributionGraphControl.xaml
│   │   │   ├── FrametimeDistributionGraphControl.xaml.cs
│   │   │   ├── FrametimeGraphControl.xaml
│   │   │   ├── FrametimeGraphControl.xaml.cs
│   │   │   ├── MarkupTextBlock.cs
│   │   │   ├── MultiSelectionDataGrid.cs
│   │   │   └── PlotViewCustomZoom.cs
│   │   ├── DataView.xaml
│   │   ├── DataView.xaml.cs
│   │   ├── OverlayView.xaml
│   │   ├── OverlayView.xaml.cs
│   │   ├── PmdView.xaml
│   │   ├── PmdView.xaml.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── Resources.Designer.cs
│   │   │   └── Resources.resx
│   │   ├── ReportView.xaml
│   │   ├── ReportView.xaml.cs
│   │   ├── SensorView.xaml
│   │   ├── SensorView.xaml.cs
│   │   ├── StateView.xaml
│   │   ├── StateView.xaml.cs
│   │   ├── Styles/
│   │   │   └── CustomRangeSliderStyle.xaml
│   │   ├── SynchronizationView.xaml
│   │   ├── SynchronizationView.xaml.cs
│   │   ├── Themes/
│   │   │   ├── DarkTheme.cs
│   │   │   └── LightTheme.cs
│   │   ├── UITracker/
│   │   │   ├── ColumnWidthTracker.cs
│   │   │   └── RowHeightTracker.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.ViewModel/
│   │   ├── AggregationViewModel.cs
│   │   ├── CapFrameX.ViewModel.csproj
│   │   ├── CaptureViewModel.cs
│   │   ├── CloudViewModel.cs
│   │   ├── ColorRessource.cs
│   │   ├── ColorbarViewModel.cs
│   │   ├── ComparisonColorManager.cs
│   │   ├── ComparisonDataViewModel.cs
│   │   ├── ComparisonRecordInfoWrapper.cs
│   │   ├── ComparisonViewModel.cs
│   │   ├── ComparisonViewModelItems.cs
│   │   ├── ComparisonViewModelLabel.cs
│   │   ├── ControlViewModel.cs
│   │   ├── DataContext/
│   │   │   ├── FpsGraphDataContext.cs
│   │   │   ├── FrametimeDistributionGraphDataContext.cs
│   │   │   ├── FrametimeGraphDataContext.cs
│   │   │   └── GraphDataContextBase.cs
│   │   ├── DataThresholdViewModel.cs
│   │   ├── DataViewModel.cs
│   │   ├── DataViewModelParameterSettings.cs
│   │   ├── EChartYAxisSetting.cs
│   │   ├── EComparisonContext.cs
│   │   ├── OverlayViewModel.cs
│   │   ├── PmdViewModel.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── packages.config
│   │   ├── ReportViewModel.cs
│   │   ├── ReportViewModelParameterSettings.cs
│   │   ├── SensorViewModel.cs
│   │   ├── StateViewModel.cs
│   │   ├── StateViewModelSystemStatus.cs
│   │   ├── SubModels/
│   │   │   ├── BenchlabViewModel.cs
│   │   │   ├── ComparisonColorItems.cs
│   │   │   ├── OverlayGroupControl.cs
│   │   │   ├── OverlayGroupSeparating.cs
│   │   │   ├── PmdViewModelBase.cs
│   │   │   ├── PoweneticsViewModel.cs
│   │   │   └── SensorGroupControl.cs
│   │   ├── SynchronizationViewModel.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.VoltageMonitor/
│   │   ├── App.xaml
│   │   ├── App.xaml.cs
│   │   ├── CapFrameX.VoltageMonitor.csproj
│   │   ├── MainWindow.xaml
│   │   └── MainWindow.xaml.cs
│   ├── CapFrameX.Webservice.Data/
│   │   ├── CapFrameX.Webservice.Data.csproj
│   │   ├── Commands/
│   │   │   ├── AddProcessCommand.cs
│   │   │   ├── DeleteSessionCollectionByIdCommand.cs
│   │   │   └── UploadSessionsCommand.cs
│   │   ├── DTO/
│   │   │   ├── ContactMessage.cs
│   │   │   ├── ProcessListData.cs
│   │   │   ├── SessionCollectionDTO.cs
│   │   │   ├── SessionCollectionReducedDTO.cs
│   │   │   ├── SqAppNotification.cs
│   │   │   ├── SqSessionCollection.cs
│   │   │   └── UserClaims.cs
│   │   ├── Exceptions/
│   │   │   └── SessionCollectionNotFoundException.cs
│   │   ├── Extensions/
│   │   │   ├── ByteArrayExtensions.cs
│   │   │   └── HttpRequestExtensions.cs
│   │   ├── Interfaces/
│   │   │   ├── ICrashlogReportingService.cs
│   │   │   ├── IProcessListService.cs
│   │   │   ├── ISessionService.cs
│   │   │   └── IUserClaimsProvider.cs
│   │   ├── Mappings/
│   │   │   ├── AppNotificationProfile.cs
│   │   │   ├── ProcessListProfile.cs
│   │   │   └── SessionCollectionProfile.cs
│   │   ├── Options/
│   │   │   └── SmtpOptions.cs
│   │   ├── Providers/
│   │   │   └── UserClaimsProvider.cs
│   │   └── Queries/
│   │       ├── GetAppNotificationQuery.cs
│   │       ├── GetProcessListQuery.cs
│   │       ├── GetSessionCollectionByIdQuery.cs
│   │       ├── GetSessionCollectionReducedByIdQuery.cs
│   │       ├── GetSessionCollectionsReducedForUserByIdQuery.cs
│   │       ├── GetSessionDetailByFileIdQuery.cs
│   │       └── SearchSessionsQuery.cs
│   ├── CapFrameX.Webservice.Host/
│   │   ├── Attributes/
│   │   │   └── UserAgentFilter.cs
│   │   ├── CapFrameX.Webservice.Host.csproj
│   │   ├── Controllers/
│   │   │   ├── AppNotificationController.cs
│   │   │   ├── ContactController.cs
│   │   │   ├── CrashLogsController.cs
│   │   │   ├── ProcessListController.cs
│   │   │   ├── SessionCollectionsController.cs
│   │   │   └── SessionsController.cs
│   │   ├── Dockerfile
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── Startup.cs
│   │   ├── appsettings.Development.json
│   │   └── appsettings.json
│   ├── CapFrameX.Webservice.Implementation/
│   │   ├── CapFrameX.Webservice.Implementation.csproj
│   │   ├── Handlers/
│   │   │   ├── AddProcessHandler.cs
│   │   │   ├── DeleteSessionCollectionByIdHandler.cs
│   │   │   ├── GetAppNotificationHandler.cs
│   │   │   ├── GetProcessListHandler.cs
│   │   │   ├── GetSessionCollectionByIdHandler.cs
│   │   │   ├── GetSessionCollectionReducedByIdHandler.cs
│   │   │   ├── GetSessionCollectionsReducedByUserIdHandler.cs
│   │   │   ├── GetSessionDetailByFileIdHandler.cs
│   │   │   ├── SearchSessionsHandler.cs
│   │   │   └── UploadCapturesHandler.cs
│   │   └── Services/
│   │       └── SquidexService.cs
│   ├── CapFrameX.Webservice.Persistance/
│   │   ├── CXContext.cs
│   │   ├── CapFrameX.Webservice.Persistance.csproj
│   │   ├── Configurations/
│   │   │   ├── GameConfiguration.cs
│   │   │   ├── IgnoreEntryConfiguration.cs
│   │   │   ├── SessionCollectionConfiguration.cs
│   │   │   └── SessionProxyConfiguratation.cs
│   │   └── Migrations/
│   │       ├── 20200226211712_Initial.Designer.cs
│   │       ├── 20200226211712_Initial.cs
│   │       ├── 20200313210429_drop_collectionName.Designer.cs
│   │       ├── 20200313210429_drop_collectionName.cs
│   │       ├── 20200314201139_processLists.Designer.cs
│   │       ├── 20200314201139_processLists.cs
│   │       └── CXContextModelSnapshot.cs
│   ├── CapFrameXBootstrapper/
│   │   ├── Bundle.wxs
│   │   ├── CapFrameXBootstrapper.wixproj
│   │   ├── license.rtf
│   │   └── theme.xml
│   ├── CapFrameXInstaller/
│   │   ├── CapFrameX.Binaries.wxs
│   │   ├── CapFrameXInstaller.wixproj
│   │   ├── Product.wxs
│   │   └── filter.xslt
│   ├── LibreHardwareMonitorLib/
│   │   ├── Hardware/
│   │   │   ├── Battery/
│   │   │   │   ├── Battery.cs
│   │   │   │   ├── BatteryChemistry.cs
│   │   │   │   └── BatteryGroup.cs
│   │   │   ├── CompositeSensor.cs
│   │   │   ├── Computer.cs
│   │   │   ├── Control.cs
│   │   │   ├── Controller/
│   │   │   │   ├── AeroCool/
│   │   │   │   │   ├── AeroCoolGroup.cs
│   │   │   │   │   └── P7-H1.cs
│   │   │   │   ├── AquaComputer/
│   │   │   │   │   ├── AquaComputerGroup.cs
│   │   │   │   │   ├── AquastreamUltimate.cs
│   │   │   │   │   ├── AquastreamXT.cs
│   │   │   │   │   ├── D5Next.cs
│   │   │   │   │   ├── Farbwerk.cs
│   │   │   │   │   ├── Farbwerk360.cs
│   │   │   │   │   ├── HighFlowNext.cs
│   │   │   │   │   ├── MPS.cs
│   │   │   │   │   ├── Octo.cs
│   │   │   │   │   └── Quadro.cs
│   │   │   │   ├── Heatmaster/
│   │   │   │   │   ├── Heatmaster.cs
│   │   │   │   │   └── HeatmasterGroup.cs
│   │   │   │   ├── Nzxt/
│   │   │   │   │   ├── GridV3.cs
│   │   │   │   │   ├── KrakenV2.cs
│   │   │   │   │   ├── KrakenV3.cs
│   │   │   │   │   └── NzxtGroup.cs
│   │   │   │   ├── Razer/
│   │   │   │   │   ├── RazerFanController.cs
│   │   │   │   │   └── RazerGroup.cs
│   │   │   │   └── TBalancer/
│   │   │   │       ├── TBalancer.cs
│   │   │   │       └── TBalancerGroup.cs
│   │   │   ├── Cpu/
│   │   │   │   ├── Amd0FCpu.cs
│   │   │   │   ├── Amd10Cpu.cs
│   │   │   │   ├── Amd17Cpu.cs
│   │   │   │   ├── AmdCpu.cs
│   │   │   │   ├── CpuArchitecture.cs
│   │   │   │   ├── CpuGroup.cs
│   │   │   │   ├── CpuId.cs
│   │   │   │   ├── CpuLoad.cs
│   │   │   │   ├── GenericCpu.cs
│   │   │   │   └── IntelCpu.cs
│   │   │   ├── D3DDisplayDevice.cs
│   │   │   ├── FirmwareTable.cs
│   │   │   ├── Gpu/
│   │   │   │   ├── AmdGpu.cs
│   │   │   │   ├── AmdGpuGroup.cs
│   │   │   │   ├── Display.cs
│   │   │   │   ├── GenericGpu.cs
│   │   │   │   ├── IntelD3DGpu.cs
│   │   │   │   ├── IntelGclGpu.cs
│   │   │   │   ├── IntelGpuGroup.cs
│   │   │   │   ├── NvDisplayHandleInfo.cs
│   │   │   │   ├── NvidiaGpu.cs
│   │   │   │   └── NvidiaGroup.cs
│   │   │   ├── GpuSensorCache.cs
│   │   │   ├── GroupAffinity.cs
│   │   │   ├── Hardware.cs
│   │   │   ├── HardwareType.cs
│   │   │   ├── IComputer.cs
│   │   │   ├── IControl.cs
│   │   │   ├── IElement.cs
│   │   │   ├── IGroup.cs
│   │   │   ├── IHardware.cs
│   │   │   ├── IHardwareChanged.cs
│   │   │   ├── IParameter.cs
│   │   │   ├── ISensor.cs
│   │   │   ├── ISensorLimits.cs
│   │   │   ├── ISettings.cs
│   │   │   ├── IVisitor.cs
│   │   │   ├── Identifier.cs
│   │   │   ├── Memory/
│   │   │   │   ├── DimmMemory.cs
│   │   │   │   ├── MemoryGroup.cs
│   │   │   │   ├── MemoryLinux.cs
│   │   │   │   ├── MemoryWindows.cs
│   │   │   │   ├── Sensors/
│   │   │   │   │   └── SpdThermalSensor.cs
│   │   │   │   ├── TotalMemory.cs
│   │   │   │   └── VirtualMemory.cs
│   │   │   ├── Motherboard/
│   │   │   │   ├── Control.cs
│   │   │   │   ├── Fan.cs
│   │   │   │   ├── Identification.cs
│   │   │   │   ├── Lpc/
│   │   │   │   │   ├── Chip.cs
│   │   │   │   │   ├── EC/
│   │   │   │   │   │   ├── EmbeddedController.cs
│   │   │   │   │   │   ├── EmbeddedControllerReader.cs
│   │   │   │   │   │   ├── EmbeddedControllerSource.cs
│   │   │   │   │   │   ├── IEmbeddedControllerIO.cs
│   │   │   │   │   │   ├── WindowsEmbeddedController.cs
│   │   │   │   │   │   └── WindowsEmbeddedControllerIO.cs
│   │   │   │   │   ├── F718XX.cs
│   │   │   │   │   ├── IGigabyteController.cs
│   │   │   │   │   ├── ISuperIO.cs
│   │   │   │   │   ├── IT87XX.cs
│   │   │   │   │   ├── Ipmi.cs
│   │   │   │   │   ├── LMSensors.cs
│   │   │   │   │   ├── LpcIO.cs
│   │   │   │   │   ├── LpcPort.cs
│   │   │   │   │   ├── Nct677X.cs
│   │   │   │   │   └── W836XX.cs
│   │   │   │   ├── Manufacturer.cs
│   │   │   │   ├── Model.cs
│   │   │   │   ├── Motherboard.cs
│   │   │   │   ├── MotherboardGroup.cs
│   │   │   │   ├── SuperIOHardware.cs
│   │   │   │   ├── Temperature.cs
│   │   │   │   └── Voltage.cs
│   │   │   ├── Mutexes.cs
│   │   │   ├── Network/
│   │   │   │   ├── Network.cs
│   │   │   │   └── NetworkGroup.cs
│   │   │   ├── OpCode.cs
│   │   │   ├── Parameter.cs
│   │   │   ├── ParameterDescription.cs
│   │   │   ├── Psu/
│   │   │   │   ├── Corsair/
│   │   │   │   │   ├── CorsairPsu.cs
│   │   │   │   │   ├── CorsairPsuGroup.cs
│   │   │   │   │   └── UsbApi.cs
│   │   │   │   ├── Msi/
│   │   │   │   │   ├── MsiPsu.cs
│   │   │   │   │   ├── MsiPsuGroup.cs
│   │   │   │   │   └── UsbApi.cs
│   │   │   │   └── ProtocolError.cs
│   │   │   ├── RefreshRateBuffer.cs
│   │   │   ├── RyzenSMU.cs
│   │   │   ├── SMBios.cs
│   │   │   ├── Sensor.cs
│   │   │   ├── SensorVisitor.cs
│   │   │   ├── Simulation/
│   │   │   │   ├── SimulatedCpu.cs
│   │   │   │   ├── SimulatedCpuGroup.cs
│   │   │   │   ├── SimulatedGpu.cs
│   │   │   │   ├── SimulatedGpuGroup.cs
│   │   │   │   ├── SimulationConfiguration.cs
│   │   │   │   └── SimulationHelpers.cs
│   │   │   ├── Storage/
│   │   │   │   ├── ATAStorage.cs
│   │   │   │   ├── AbstractStorage.cs
│   │   │   │   ├── DebugSmart.cs
│   │   │   │   ├── GenericHardDisk.cs
│   │   │   │   ├── INVMeDrive.cs
│   │   │   │   ├── ISmart.cs
│   │   │   │   ├── NVMeGeneric.cs
│   │   │   │   ├── NVMeHealthInfo.cs
│   │   │   │   ├── NVMeInfo.cs
│   │   │   │   ├── NVMeIntel.cs
│   │   │   │   ├── NVMeIntelRst.cs
│   │   │   │   ├── NVMeSamsung.cs
│   │   │   │   ├── NVMeSmart.cs
│   │   │   │   ├── NVMeWindows.cs
│   │   │   │   ├── NamePrefixAttribute.cs
│   │   │   │   ├── RequireSmartAttribute.cs
│   │   │   │   ├── SmartAttribute.cs
│   │   │   │   ├── SmartNames.cs
│   │   │   │   ├── SsdIndilinx.cs
│   │   │   │   ├── SsdIntel.cs
│   │   │   │   ├── SsdMicron.cs
│   │   │   │   ├── SsdPlextor.cs
│   │   │   │   ├── SsdSamsung.cs
│   │   │   │   ├── SsdSandforce.cs
│   │   │   │   ├── StorageGeneric.cs
│   │   │   │   ├── StorageGroup.cs
│   │   │   │   ├── StorageInfo.cs
│   │   │   │   ├── WindowsSmart.cs
│   │   │   │   └── WindowsStorage.cs
│   │   │   └── ThreadAffinity.cs
│   │   ├── Interop/
│   │   │   ├── ADLX.cs
│   │   │   ├── AtaSmart.cs
│   │   │   ├── ByteExtensions.cs
│   │   │   ├── Ftd2xx.cs
│   │   │   ├── IGCL.cs
│   │   │   ├── Ipmi.cs
│   │   │   ├── LibC.cs
│   │   │   ├── NtDll.cs
│   │   │   ├── NvApi.cs
│   │   │   └── NvidiaML.cs
│   │   ├── LibreHardwareMonitorLib.csproj
│   │   ├── NativeMethods.txt
│   │   ├── PawnIo/
│   │   │   ├── AmdFamily0F.cs
│   │   │   ├── AmdFamily10.cs
│   │   │   ├── AmdFamily17.cs
│   │   │   ├── DriverInstaller.cs
│   │   │   ├── IntelImc.cs
│   │   │   ├── IntelMsr.cs
│   │   │   ├── LpcACPIEC.cs
│   │   │   ├── LpcIO.cs
│   │   │   ├── PawnIO.sys
│   │   │   ├── PawnIOLib.h
│   │   │   ├── PawnIo.cs
│   │   │   └── RyzenSmu.cs
│   │   ├── RAMSPDToolkitDriver.cs
│   │   ├── Resources/
│   │   │   └── PawnIO/
│   │   │       ├── COPYING
│   │   │       └── README
│   │   ├── Software/
│   │   │   └── OperatingSystem.cs
│   │   └── main.nuget.target
│   ├── MonitoringLibTestApp/
│   │   ├── App.config
│   │   ├── MonitoringLibTestApp.csproj
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SensorService.cs
│   │   ├── app.manifest
│   │   └── packages.config
│   └── PipeTestConsoleApp/
│       ├── App.config
│       ├── PipeTestConsoleApp.csproj
│       ├── Program.cs
│       └── Properties/
│           └── AssemblyInfo.cs
└── version/
    └── Version.txt

================================================
FILE CONTENTS
================================================

================================================
FILE: .dockerignore
================================================
**/.classpath
**/.dockerignore
**/.env
**/.git
**/.gitignore
**/.project
**/.settings
**/.toolstarget
**/.vs
**/.vscode
**/*.*proj.user
**/*.dbmdl
**/*.jfm
**/azds.yaml
**/bin
**/charts
**/docker-compose*
**/Dockerfile*
**/node_modules
**/npm-debug.log
**/obj
**/secrets.dev.yaml
**/values.dev.yaml
LICENSE
README.md

================================================
FILE: .editorconfig
================================================
[*.cs]

# CA1031: Do not catch general exception types
dotnet_diagnostic.CA1031.severity = none


================================================
FILE: .editorconfig.inferred
================================================
# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\Code\CapFrameX codebase based on best match to current usage at 13.11.2020
# There already existed an .editorconfig file in this directory. Copy rules from this .editorconfig.inferred file to the existing .editorconfig file as desired to have them take effect at this location.
# You can modify the rules from these initially generated values to suit your own policies
# You can learn more about editorconfig here: https://docs.microsoft.com/en-us/visualstudio/ide/editorconfig-code-style-settings-reference
[*.cs]


#Core editorconfig formatting - indentation

#use soft tabs (spaces) for indentation
indent_style = space

#Formatting - indentation options

#indent switch case contents.
csharp_indent_case_contents = true
#csharp_indent_case_contents_when_block
csharp_indent_case_contents_when_block = true
#indent switch labels
csharp_indent_switch_labels = true

#Formatting - new line options

#place catch statements on a new line
csharp_new_line_before_catch = true
#place else statements on a new line
csharp_new_line_before_else = true
#require members of object initializers to be on the same line
csharp_new_line_before_members_in_object_initializers = false
#require braces to be on a new line for lambdas, properties, and object_collection_array_initializers (also known as "Allman" style)
csharp_new_line_before_open_brace = lambdas, properties, object_collection_array_initializers

#Formatting - organize using options

#sort System.* using directives alphabetically, and place them before other usings
dotnet_sort_system_directives_first = true

#Formatting - spacing options

#require NO space between a cast and the value
csharp_space_after_cast = false
#require a space before the colon for bases or interfaces in a type declaration
csharp_space_after_colon_in_inheritance_clause = true
#require a space after a keyword in a control flow statement such as a for loop
csharp_space_after_keywords_in_control_flow_statements = true
#require a space before the colon for bases or interfaces in a type declaration
csharp_space_before_colon_in_inheritance_clause = true
#remove space within empty argument list parentheses
csharp_space_between_method_call_empty_parameter_list_parentheses = false
#remove space between method call name and opening parenthesis
csharp_space_between_method_call_name_and_opening_parenthesis = false
#do not place space characters after the opening parenthesis and before the closing parenthesis of a method call
csharp_space_between_method_call_parameter_list_parentheses = false
#remove space within empty parameter list parentheses for a method declaration
csharp_space_between_method_declaration_empty_parameter_list_parentheses = false
#place a space character after the opening parenthesis and before the closing parenthesis of a method declaration parameter list.
csharp_space_between_method_declaration_parameter_list_parentheses = false

#Formatting - wrapping options

#leave code block on single line
csharp_preserve_single_line_blocks = true
#leave statements and member declarations on the same line
csharp_preserve_single_line_statements = true

#Style - Code block preferences

#prefer no curly braces if allowed
csharp_prefer_braces = false:suggestion

#Style - expression bodied member options

#prefer block bodies for accessors
csharp_style_expression_bodied_accessors = false:suggestion
#prefer block bodies for constructors
csharp_style_expression_bodied_constructors = false:suggestion
#prefer block bodies for methods
csharp_style_expression_bodied_methods = false:suggestion
#prefer block bodies for properties
csharp_style_expression_bodied_properties = false:suggestion

#Style - expression level options

#prefer out variables to be declared before the method call
csharp_style_inlined_variable_declaration = false:suggestion
#prefer the language keyword for member access expressions, instead of the type name, for types that have a keyword to represent them
dotnet_style_predefined_type_for_member_access = true:suggestion

#Style - Expression-level  preferences

#prefer default(T) over default
csharp_prefer_simple_default_expression = false:suggestion
#prefer objects to be initialized using object initializers when possible
dotnet_style_object_initializer = true:suggestion

#Style - implicit and explicit types

#prefer var over explicit type in all cases, unless overridden by another code style rule
csharp_style_var_elsewhere = true:suggestion
#prefer explicit type over var to declare variables with built-in system types such as int
csharp_style_var_for_built_in_types = false:suggestion
#prefer var when the type is already mentioned on the right-hand side of a declaration expression
csharp_style_var_when_type_is_apparent = true:suggestion

#Style - language keyword and framework type options

#prefer the language keyword for local variables, method parameters, and class members, instead of the type name, for types that have a keyword to represent them
dotnet_style_predefined_type_for_locals_parameters_members = true:suggestion

#Style - Miscellaneous preferences

#prefer anonymous functions over local functions
csharp_style_pattern_local_over_anonymous_function = false:suggestion

#Style - modifier options

#prefer accessibility modifiers to be declared except for public interface members. This will currently not differ from always and will act as future proofing for if C# adds default interface methods.
dotnet_style_require_accessibility_modifiers = for_non_interface_members:suggestion

#Style - Modifier preferences

#when this rule is set to a list of modifiers, prefer the specified ordering.
csharp_preferred_modifier_order = public,private,protected,internal,override,readonly,static,sealed,virtual,abstract,async,new:suggestion

#Style - Pattern matching

#prefer is expression with type casts instead of pattern matching
csharp_style_pattern_matching_over_as_with_null_check = false:suggestion

#Style - qualification options

#prefer events not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_event = false:suggestion
#prefer fields not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_field = false:suggestion
#prefer methods not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_method = false:suggestion
#prefer properties not to be prefaced with this. or Me. in Visual Basic
dotnet_style_qualification_for_property = false:suggestion


================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and files generated by popular Visual Studio add-ons.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates

# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
bld/
[Bb]in/
[Oo]bj/
[Ll]og/

# Visual Studio 2015 cache/options directory
.vs/
# Uncomment if you have tasks that create the project's static files in wwwroot
#wwwroot/

# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*

# NUNIT
*.VisualState.xml
TestResult.xml

# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c

# DNX
project.lock.json
project.fragment.lock.json
artifacts/

*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc

# Chutzpah Test files
_Chutzpah*

# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opendb
*.opensdf
*.sdf
*.cachefile
*.VC.db
*.VC.VC.opendb

# Visual Studio profiler
*.psess
*.vsp
*.vspx
*.sap

# TFS 2012 Local Workspace
$tf/

# Guidance Automation Toolkit
*.gpState

# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user

# JustCode is a .NET coding add-in
.JustCode

# TeamCity is a build add-in
_TeamCity*

# DotCover is a Code Coverage Tool
*.dotCover

# NCrunch
_NCrunch_*
.*crunch*.local.xml
nCrunchTemp_*

# MightyMoose
*.mm.*
AutoTest.Net/

# Web workbench (sass)
.sass-cache/

# Installshield output folder
[Ee]xpress/

# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html

# Click-Once directory
publish/

# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
#*.pubxml
*.publishproj

# Microsoft Azure Web App publish settings. Comment the next line if you want to
# checkin your Azure Web App publish settings, but sensitive information contained
# in these scripts will be unencrypted
PublishScripts/

# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# NuGet v3's project.json files produces more ignoreable files
*.nuget.props
*.nuget.targets

# Microsoft Azure Build Output
csx/
*.build.csdef

# Microsoft Azure Emulator
ecf/
rcf/

# Windows Store app package directories and files
AppPackages/
BundleArtifacts/
Package.StoreAssociation.xml
_pkginfo.txt

# Visual Studio cache files
# files ending in .cache can be ignored
*.[Cc]ache
# but keep track of directories ending in .cache
!*.[Cc]ache/

# Others
ClientBin/
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.jfm
*.pfx
*.publishsettings
node_modules/
orleans.codegen.cs

# Since there are multiple workflows, uncomment next line to ignore bower_components
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
#bower_components/

# RIA/Silverlight projects
Generated_Code/

# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm

# SQL Server files
*.mdf
*.ldf

# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings

# Microsoft Fakes
FakesAssemblies/

# GhostDoc plugin setting file
*.GhostDoc.xml

# Node.js Tools for Visual Studio
.ntvs_analysis.dat

# Visual Studio 6 build log
*.plg

# Visual Studio 6 workspace options file
*.opt

# Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts
**/*.DesktopClient/ModelManifest.xml
**/*.Server/GeneratedArtifacts
**/*.Server/ModelManifest.xml
_Pvt_Extensions

# Paket dependency manager
.paket/paket.exe
paket-files/

# FAKE - F# Make
.fake/

# JetBrains Rider
.idea/
*.sln.iml

# CodeRush
.cr/

# Python Tools for Visual Studio (PTVS)
__pycache__/
*.pyc
source/publish webservice.ps1

# Claude Code
.claude/

# Ignore nul file created by bash operations
nul

# Crash reports
crash-report/
/pmcreader-plugin/Zen5Log.txt


================================================
FILE: AGENTS.md
================================================
# Repository Guidelines

## Project Structure & Module Organization

- `source/` holds the main C# and C++ projects; the WPF app lives in `source/CapFrameX` and native components live in folders like `source/CapFrameX.Hwinfo`, `source/CapFrameX.FrameView`, `source/CapFrameX.IGCL`, and `source/CapFrameX.ADLX`.
- Tests are in `source/CapFrameX.Test` (MSTest), with fixture files under `source/CapFrameX.Test/TestRecordFiles`.
- Assets and documentation resources live in `images/` and project docs like `PORTABLE_MODE.md` and `README.md` live at the repo root.
- Build and version metadata are in `CapFrameX.sln`, `packages/`, and `version/Version.txt`.

## Build, Test, and Development Commands

- `nuget restore CapFrameX.sln` restores NuGet packages for the full solution.
- `msbuild CapFrameX.sln /p:Configuration=Release /p:Platform=x64` builds the full solution.
- `msbuild source\CapFrameX\CapFrameX.csproj /p:Configuration=Release /p:Platform=x64` builds the main app only.
- `msbuild source\CapFrameXInstaller\CapFrameXInstaller.wixproj /p:Configuration=Release /p:Platform=x64` builds the WiX installer.
- `vstest.console source\CapFrameX.Test\bin\x64\Release\CapFrameX.Test.dll` runs unit tests after building the test project.

See `Jenkinsfile` for the CI build ordering and Visual Studio version settings.

## Coding Style & Naming Conventions

- C# uses spaces for indentation and favors Allman-style braces; `System.*` usings should appear before other namespaces.
- Follow existing naming: PascalCase for types and public members, camelCase for locals and parameters, and `I*` for interfaces.
- Keep `packages.config` and `app.config` consistent when adding dependencies or configuration.

## Testing Guidelines

- Tests use MSTest in `source/CapFrameX.Test`; keep new tests near related feature folders (for example `Data` or `Statistics`).
- Name test files with the `*Test.cs` suffix and add new fixture CSVs to `TestRecordFiles` when needed.
- Prefer x64 test runs because several native components are x64-only.

## Commit & Pull Request Guidelines

- Git history was not accessible in this environment, so follow a short, imperative subject line (for example, "Fix capture session parsing") and add context in the body when needed.
- PRs should explain the change, include repro steps, and provide screenshots for UI/overlay changes. Link related issues if applicable.

## Configuration & Runtime Notes

- Portable mode settings are documented in `PORTABLE_MODE.md`; use `portable.json.sample` as a starting point for local overrides.
- Avoid committing local logs (`logs/`) or generated outputs.


================================================
FILE: CLAUDE.md
================================================
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

CapFrameX is a Windows desktop application for frametime capture and analysis, built on Intel's PresentMon. It provides an overlay via Rivatuner Statistics Server (RTSS) and is used for gaming performance benchmarking.

## Build Commands

### Prerequisites
- Visual Studio 2022
- WiX Toolset v3.14.1 with VS 2022 Extension
- C++ MFC build tools

### Build the Main Application
```bash
nuget restore CapFrameX.sln
msbuild source\CapFrameX\CapFrameX.csproj /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=17.0
```

### Build Native C++ Components (required for full functionality)
```bash
msbuild source\CapFrameX.Hwinfo\CapFrameX.Hwinfo.vcxproj /p:SolutionDir=%CD%\ /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=17.0
msbuild source\CapFrameX.IGCL\CapFrameX.IGCL.vcxproj /p:SolutionDir=%CD%\ /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=17.0
msbuild source\CapFrameX.ADLX\CapFrameX.ADLX.vcxproj /p:SolutionDir=%CD%\ /p:Configuration=Release /p:Platform=x64 /p:VisualStudioVersion=17.0
```

### Build Installer
```bash
msbuild source\CapFrameXInstaller\CapFrameXInstaller.wixproj /p:SolutionDir=%CD%\ /p:Configuration=Release /p:Platform=x64
msbuild source\CapFrameXBootstrapper\CapFrameXBootstrapper.wixproj /p:SolutionDir=%CD%\ /p:Configuration=Release /p:Platform=x64
```

### Run Tests
Tests use MSTest framework:
```bash
vstest.console source\CapFrameX.Test\bin\x64\Release\CapFrameX.Test.dll
```

## Architecture

### Solution Structure
The solution (`CapFrameX.sln`) contains ~40 projects mixing C# (.NET Framework 4.7.2 / .NET Standard / .NET Core 3.1) and C++ native code.

### Layer Organization

**UI Layer (WPF + MVVM)**
- `CapFrameX` - Main shell application, entry point, DI container setup (DryIoc)
- `CapFrameX.View` - XAML views and UI controls
- `CapFrameX.ViewModel` - ViewModels for all views (30+ view models)
- `CapFrameX.MVVM` - MVVM infrastructure and base classes

**Core Services**
- `CapFrameX.PresentMonInterface` - Wrapper around Intel PresentMon for frametime capture
- `CapFrameX.Capture.Contracts` - Capture service interfaces
- `CapFrameX.Statistics.NetStandard` - Statistical calculations (percentiles, averages)
- `CapFrameX.Statistics.PlotBuilder` - Chart data generation
- `CapFrameX.Overlay` - Overlay management
- `CapFrameX.Sensor` / `CapFrameX.Sensor.Reporting` - Hardware sensor data collection

**Data Layer**
- `CapFrameX.Data` - File I/O, record management (JSON/CSV capture files)
- `CapFrameX.Data.Session` - Session state management
- `CapFrameX.Configuration` - AppSettings.json handling
- `CapFrameX.Contracts` - Interface definitions

**Native Interop (C++ DLLs)**
- `CapFrameX.RTSSInterface` - Rivatuner Statistics Server integration
- `CapFrameX.Hwinfo` - HWInfo64 sensor integration
- `CapFrameX.IGCL` - Intel Graphics Control Library
- `CapFrameX.ADLX` - AMD Display Library

**Webservice (ASP.NET Core 3.1)**
- `CapFrameX.Webservice.Host` - API host
- `CapFrameX.Webservice.Implementation` - Business logic
- `CapFrameX.Webservice.Data` - Entity Framework Core models
- `CapFrameX.Webservice.Persistance` - Data persistence

**Charting**
- `CapFrameX.Charts/Core40` - Core charting engine
- `CapFrameX.Charts/OxyPlot` - OxyPlot library
- `CapFrameX.Charts/WpfView` - WPF chart controls

### Key Dependencies
- Prism 7.0 (MVVM framework)
- DryIoc (IoC container)
- MahApps.Metro + MaterialDesign (UI styling)
- System.Reactive (Rx)
- OxyPlot (charting)
- Serilog (logging)

### Build Output
- Platform: x64
- Main output: `source\CapFrameX\bin\x64\Release\`
- Installer output: `source\CapFrameXBootstrapper\bin\x64\Release\CapFrameXBootstrapper.exe`

## Configuration Files
- User settings: `%appdata%/CapFrameX/Configuration/AppSettings.json`
- Overlay config: `%appdata%/CapFrameX/Configuration/OverlayEntryConfiguration_(0/1/2).json`
- Version: `version/Version.txt`

## NuGet Package Issues
If package conflicts occur, run in Package Manager Console:
```
Update-Package -reinstall
```


================================================
FILE: CapFrameX.sln
================================================

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 17
VisualStudioVersion = 17.14.36804.6
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX", "source\CapFrameX\CapFrameX.csproj", "{AAA73D26-5CD6-4066-B84C-5BD34057B346}"
	ProjectSection(ProjectDependencies) = postProject
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF} = {7158F27F-0F57-4216-A6EA-04FA24EFDDDF}
	EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.View", "source\CapFrameX.View\CapFrameX.View.csproj", "{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.ViewModel", "source\CapFrameX.ViewModel\CapFrameX.ViewModel.csproj", "{AD4536B2-C977-4CB8-8540-866928671C2D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Extensions", "source\CapFrameX.Extensions\CapFrameX.Extensions.csproj", "{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Test", "source\CapFrameX.Test\CapFrameX.Test.csproj", "{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.EventAggregation", "source\CapFrameX.EventAggregation\CapFrameX.EventAggregation.csproj", "{C3D082AE-BF05-4C83-B414-33CF7C420D4A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Configuration", "source\CapFrameX.Configuration\CapFrameX.Configuration.csproj", "{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.MVVM", "source\CapFrameX.MVVM\CapFrameX.MVVM.csproj", "{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Contracts", "source\CapFrameX.Contracts\CapFrameX.Contracts.csproj", "{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "CapFrameXInstaller", "source\CapFrameXInstaller\CapFrameXInstaller.wixproj", "{77416B78-A34F-4CFC-9562-A2599D054C8F}"
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "CapFrameXBootstrapper", "source\CapFrameXBootstrapper\CapFrameXBootstrapper.wixproj", "{9E2FAB6F-117C-495A-A47B-52A15B9E9806}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.PresentMonInterface", "source\CapFrameX.PresentMonInterface\CapFrameX.PresentMonInterface.csproj", "{ADFBAECE-B74F-4A80-87D1-84BC990527B0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Overlay", "source\CapFrameX.Overlay\CapFrameX.Overlay.csproj", "{624777C2-6AF6-46D5-A019-1285F699B8A7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Hotkey", "source\CapFrameX.Hotkey\CapFrameX.Hotkey.csproj", "{B033A95B-C385-4A33-8992-2872DF979ECD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Core", "source\CapFrameX.Charts\Core40\Core.csproj", "{F261C3D7-6194-4625-9516-044081B06028}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WpfView", "source\CapFrameX.Charts\WpfView\WpfView.csproj", "{4D253423-AE05-47F6-A59D-9162EC0BB1F2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Data", "source\CapFrameX.Data\CapFrameX.Data.csproj", "{D328B391-432C-4A0E-9A7E-57A58AA592D4}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CapFrameX.RTSSInterface", "source\CapFrameX.RTSSInterface\CapFrameX.RTSSInterface.vcxproj", "{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Updater", "source\CapFrameX.Updater\CapFrameX.Updater.csproj", "{5D12AA37-CC30-4476-94AD-11C15DC65518}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Sensor", "source\CapFrameX.Sensor\CapFrameX.Sensor.csproj", "{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Webservice.Host", "source\CapFrameX.Webservice.Host\CapFrameX.Webservice.Host.csproj", "{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Webservice.Data", "source\CapFrameX.Webservice.Data\CapFrameX.Webservice.Data.csproj", "{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Webservice.Implementation", "source\CapFrameX.Webservice.Implementation\CapFrameX.Webservice.Implementation.csproj", "{F55962DA-2615-4AFB-AD33-0F3D5987308C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Webservice", "Webservice", "{5A596328-DBB3-47B5-B0CE-E7F6CB4591E0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Data.Session", "source\CapFrameX.Data.Session\CapFrameX.Data.Session.csproj", "{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Sensor.Reporting", "source\CapFrameX.Sensor.Reporting\CapFrameX.Sensor.Reporting.csproj", "{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Extensions.NetStandard", "source\CapFrameX.Extensions.NetStandard\CapFrameX.Extensions.NetStandard.csproj", "{554C8784-954A-4E3D-9C79-D347DEF7E069}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Statistics.NetStandard", "source\CapFrameX.Statistics.NetStandard\CapFrameX.Statistics.NetStandard.csproj", "{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.Statistics.PlotBuilder", "source\CapFrameX.Statistics.PlotBuilder\CapFrameX.Statistics.PlotBuilder.csproj", "{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.RTSSIntegration", "source\CapFrameX.RTSSIntegration\CapFrameX.RTSSIntegration.csproj", "{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.CustomInstallerActions", "source\CapFrameX.CustomInstallerActions\CapFrameX.CustomInstallerActions.csproj", "{D26EA74F-8D44-453C-AD70-3789AFFDF85F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Remote", "source\CapFrameX.ApiInterface\CapFrameX.Remote.csproj", "{A692A512-627A-4896-9D2D-4412FDD8C78C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "CapFrameX.SystemInfo.NetStandard", "source\CapFrameX.SystemInfo.NetStandard\CapFrameX.SystemInfo.NetStandard.csproj", "{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Monitoring.Contracts", "source\CapFrameX.Monitoring.Contracts\CapFrameX.Monitoring.Contracts.csproj", "{2F0D1227-BE4F-4501-B3A2-66A753ED742C}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CapFrameX.Hwinfo", "source\CapFrameX.Hwinfo\CapFrameX.Hwinfo.vcxproj", "{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.PMD", "source\CapFrameX.PMD\CapFrameX.PMD.csproj", "{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Capture.Contracts", "source\CapFrameX.Capture.Contracts\CapFrameX.Capture.Contracts.csproj", "{5742C860-6313-4477-BF11-839C35AE5588}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CapFrameX.IGCL", "source\CapFrameX.IGCL\CapFrameX.IGCL.vcxproj", "{9746F818-C1B9-461D-BD07-D20A103DC751}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CapFrameX.ADLX", "source\CapFrameX.ADLX\CapFrameX.ADLX.vcxproj", "{CFA42830-B349-4978-B708-5B1BFA9C579B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Hardware.Controller", "source\CapFrameX.Hardware.Controller\CapFrameX.Hardware.Controller.csproj", "{62E9AEEB-B322-48D0-B69B-FE64E62C461B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibreHardwareMonitorLib", "source\LibreHardwareMonitorLib\LibreHardwareMonitorLib.csproj", "{51E4211C-F281-11A3-9390-A6B54F703498}"
	ProjectSection(ProjectDependencies) = postProject
		{CFA42830-B349-4978-B708-5B1BFA9C579B} = {CFA42830-B349-4978-B708-5B1BFA9C579B}
	EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "source", "source", "{B8EFCA5F-814F-285C-A8CB-F00F14650265}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CapFrameX.Mcp", "source\CapFrameX.Mcp\CapFrameX.Mcp.csproj", "{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}"
EndProject
Global
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
		Debug|Any CPU = Debug|Any CPU
		Debug|x64 = Debug|x64
		Debug|x86 = Debug|x86
		Release|Any CPU = Release|Any CPU
		Release|x64 = Release|x64
		Release|x86 = Release|x86
	EndGlobalSection
	GlobalSection(ProjectConfigurationPlatforms) = postSolution
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Debug|x64.ActiveCfg = Debug|x64
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Debug|x64.Build.0 = Debug|x64
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Debug|x86.ActiveCfg = Debug|x86
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Debug|x86.Build.0 = Debug|x86
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Release|Any CPU.Build.0 = Release|Any CPU
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Release|x64.ActiveCfg = Release|x64
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Release|x64.Build.0 = Release|x64
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Release|x86.ActiveCfg = Release|x86
		{AAA73D26-5CD6-4066-B84C-5BD34057B346}.Release|x86.Build.0 = Release|x86
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Debug|x64.ActiveCfg = Debug|x64
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Debug|x64.Build.0 = Debug|x64
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Debug|x86.ActiveCfg = Debug|x86
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Debug|x86.Build.0 = Debug|x86
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Release|Any CPU.Build.0 = Release|Any CPU
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Release|x64.ActiveCfg = Release|x64
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Release|x64.Build.0 = Release|x64
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Release|x86.ActiveCfg = Release|x86
		{5CB56A44-8340-48F5-A9EC-DDF9AD3E10F0}.Release|x86.Build.0 = Release|x86
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Debug|x64.ActiveCfg = Debug|x64
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Debug|x64.Build.0 = Debug|x64
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Debug|x86.ActiveCfg = Debug|x86
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Debug|x86.Build.0 = Debug|x86
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Release|Any CPU.Build.0 = Release|Any CPU
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Release|x64.ActiveCfg = Release|x64
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Release|x64.Build.0 = Release|x64
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Release|x86.ActiveCfg = Release|x86
		{AD4536B2-C977-4CB8-8540-866928671C2D}.Release|x86.Build.0 = Release|x86
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Debug|x64.ActiveCfg = Debug|x64
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Debug|x64.Build.0 = Debug|x64
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Debug|x86.ActiveCfg = Debug|x86
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Debug|x86.Build.0 = Debug|x86
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Release|Any CPU.Build.0 = Release|Any CPU
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Release|x64.ActiveCfg = Release|x64
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Release|x64.Build.0 = Release|x64
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Release|x86.ActiveCfg = Release|x86
		{A4559B99-7FCB-40EF-BF97-D293A2B7D6D3}.Release|x86.Build.0 = Release|x86
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Debug|x64.ActiveCfg = Debug|x64
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Debug|x64.Build.0 = Debug|x64
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Debug|x86.ActiveCfg = Debug|x86
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Debug|x86.Build.0 = Debug|x86
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Release|Any CPU.Build.0 = Release|Any CPU
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Release|x64.ActiveCfg = Release|x64
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Release|x64.Build.0 = Release|x64
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Release|x86.ActiveCfg = Release|x86
		{55776CCE-1B05-4CCA-ACA9-20C0D84CCDCA}.Release|x86.Build.0 = Release|x86
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Debug|x64.ActiveCfg = Debug|x64
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Debug|x64.Build.0 = Debug|x64
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Debug|x86.ActiveCfg = Debug|x86
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Debug|x86.Build.0 = Debug|x86
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Release|Any CPU.Build.0 = Release|Any CPU
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Release|x64.ActiveCfg = Release|x64
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Release|x64.Build.0 = Release|x64
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Release|x86.ActiveCfg = Release|x86
		{C3D082AE-BF05-4C83-B414-33CF7C420D4A}.Release|x86.Build.0 = Release|x86
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Debug|x64.ActiveCfg = Debug|x64
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Debug|x64.Build.0 = Debug|x64
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Debug|x86.ActiveCfg = Debug|x86
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Debug|x86.Build.0 = Debug|x86
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Release|Any CPU.Build.0 = Release|Any CPU
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Release|x64.ActiveCfg = Release|x64
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Release|x64.Build.0 = Release|x64
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Release|x86.ActiveCfg = Release|x86
		{D0A09FA9-D19E-4CCC-BF0E-104893CFE48B}.Release|x86.Build.0 = Release|x86
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Debug|x64.ActiveCfg = Debug|x64
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Debug|x64.Build.0 = Debug|x64
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Debug|x86.ActiveCfg = Debug|x86
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Debug|x86.Build.0 = Debug|x86
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Release|Any CPU.Build.0 = Release|Any CPU
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Release|x64.ActiveCfg = Release|x64
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Release|x64.Build.0 = Release|x64
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Release|x86.ActiveCfg = Release|x86
		{CFB57D81-1886-45D2-AA16-EDE1DD17A9CA}.Release|x86.Build.0 = Release|x86
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Debug|Any CPU.ActiveCfg = Debug|x64
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Debug|Any CPU.Build.0 = Debug|x64
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Debug|x64.ActiveCfg = Debug|x64
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Debug|x64.Build.0 = Debug|x64
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Debug|x86.ActiveCfg = Debug|x86
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Debug|x86.Build.0 = Debug|x86
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Release|Any CPU.Build.0 = Release|Any CPU
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Release|x64.ActiveCfg = Release|x64
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Release|x64.Build.0 = Release|x64
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Release|x86.ActiveCfg = Release|x86
		{4C3B8B5C-54D7-46A1-91A1-32BF82FD42CD}.Release|x86.Build.0 = Release|x86
		{77416B78-A34F-4CFC-9562-A2599D054C8F}.Debug|Any CPU.ActiveCfg = Debug|x86
		{77416B78-A34F-4CFC-9562-A2599D054C8F}.Debug|x64.ActiveCfg = Debug|x86
		{77416B78-A34F-4CFC-9562-A2599D054C8F}.Debug|x86.ActiveCfg = Debug|x86
		{77416B78-A34F-4CFC-9562-A2599D054C8F}.Release|Any CPU.ActiveCfg = Release|x86
		{77416B78-A34F-4CFC-9562-A2599D054C8F}.Release|x64.ActiveCfg = Release|x86
		{77416B78-A34F-4CFC-9562-A2599D054C8F}.Release|x86.ActiveCfg = Release|x86
		{9E2FAB6F-117C-495A-A47B-52A15B9E9806}.Debug|Any CPU.ActiveCfg = Debug|x86
		{9E2FAB6F-117C-495A-A47B-52A15B9E9806}.Debug|x64.ActiveCfg = Debug|x86
		{9E2FAB6F-117C-495A-A47B-52A15B9E9806}.Debug|x86.ActiveCfg = Debug|x86
		{9E2FAB6F-117C-495A-A47B-52A15B9E9806}.Release|Any CPU.ActiveCfg = Release|x86
		{9E2FAB6F-117C-495A-A47B-52A15B9E9806}.Release|x64.ActiveCfg = Release|x86
		{9E2FAB6F-117C-495A-A47B-52A15B9E9806}.Release|x86.ActiveCfg = Release|x86
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Debug|x64.ActiveCfg = Debug|x64
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Debug|x64.Build.0 = Debug|x64
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Debug|x86.ActiveCfg = Debug|x86
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Debug|x86.Build.0 = Debug|x86
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Release|Any CPU.Build.0 = Release|Any CPU
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Release|x64.ActiveCfg = Release|x64
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Release|x64.Build.0 = Release|x64
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Release|x86.ActiveCfg = Release|x86
		{ADFBAECE-B74F-4A80-87D1-84BC990527B0}.Release|x86.Build.0 = Release|x86
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Debug|x64.ActiveCfg = Debug|x64
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Debug|x64.Build.0 = Debug|x64
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Debug|x86.ActiveCfg = Debug|x86
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Debug|x86.Build.0 = Debug|x86
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Release|Any CPU.Build.0 = Release|Any CPU
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Release|x64.ActiveCfg = Release|x64
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Release|x64.Build.0 = Release|x64
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Release|x86.ActiveCfg = Release|x86
		{624777C2-6AF6-46D5-A019-1285F699B8A7}.Release|x86.Build.0 = Release|x86
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Debug|x64.ActiveCfg = Debug|x64
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Debug|x64.Build.0 = Debug|x64
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Debug|x86.ActiveCfg = Debug|x86
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Debug|x86.Build.0 = Debug|x86
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Release|Any CPU.Build.0 = Release|Any CPU
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Release|x64.ActiveCfg = Release|x64
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Release|x64.Build.0 = Release|x64
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Release|x86.ActiveCfg = Release|x86
		{B033A95B-C385-4A33-8992-2872DF979ECD}.Release|x86.Build.0 = Release|x86
		{F261C3D7-6194-4625-9516-044081B06028}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F261C3D7-6194-4625-9516-044081B06028}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F261C3D7-6194-4625-9516-044081B06028}.Debug|x64.ActiveCfg = Debug|x64
		{F261C3D7-6194-4625-9516-044081B06028}.Debug|x64.Build.0 = Debug|x64
		{F261C3D7-6194-4625-9516-044081B06028}.Debug|x86.ActiveCfg = Debug|x86
		{F261C3D7-6194-4625-9516-044081B06028}.Debug|x86.Build.0 = Debug|x86
		{F261C3D7-6194-4625-9516-044081B06028}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F261C3D7-6194-4625-9516-044081B06028}.Release|Any CPU.Build.0 = Release|Any CPU
		{F261C3D7-6194-4625-9516-044081B06028}.Release|x64.ActiveCfg = Release|x64
		{F261C3D7-6194-4625-9516-044081B06028}.Release|x64.Build.0 = Release|x64
		{F261C3D7-6194-4625-9516-044081B06028}.Release|x86.ActiveCfg = Release|x86
		{F261C3D7-6194-4625-9516-044081B06028}.Release|x86.Build.0 = Release|x86
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Debug|x64.ActiveCfg = Debug|x64
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Debug|x64.Build.0 = Debug|x64
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Debug|x86.ActiveCfg = Debug|x86
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Debug|x86.Build.0 = Debug|x86
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Release|Any CPU.Build.0 = Release|Any CPU
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Release|x64.ActiveCfg = Release|x64
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Release|x64.Build.0 = Release|x64
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Release|x86.ActiveCfg = Release|x86
		{4D253423-AE05-47F6-A59D-9162EC0BB1F2}.Release|x86.Build.0 = Release|x86
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Debug|x64.ActiveCfg = Debug|x64
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Debug|x64.Build.0 = Debug|x64
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Debug|x86.ActiveCfg = Debug|x86
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Debug|x86.Build.0 = Debug|x86
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Release|Any CPU.Build.0 = Release|Any CPU
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Release|x64.ActiveCfg = Release|x64
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Release|x64.Build.0 = Release|x64
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Release|x86.ActiveCfg = Release|x86
		{D328B391-432C-4A0E-9A7E-57A58AA592D4}.Release|x86.Build.0 = Release|x86
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Debug|Any CPU.ActiveCfg = Debug|Win32
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Debug|x64.ActiveCfg = Debug|x64
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Debug|x64.Build.0 = Debug|x64
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Debug|x86.ActiveCfg = Debug|Win32
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Debug|x86.Build.0 = Debug|Win32
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Release|Any CPU.ActiveCfg = Release|Win32
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Release|x64.ActiveCfg = Release|x64
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Release|x64.Build.0 = Release|x64
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Release|x86.ActiveCfg = Release|Win32
		{9C46D3F3-72E0-4E6C-AD3E-54A5EE121475}.Release|x86.Build.0 = Release|Win32
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Debug|x64.ActiveCfg = Debug|x64
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Debug|x64.Build.0 = Debug|x64
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Debug|x86.ActiveCfg = Debug|x86
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Debug|x86.Build.0 = Debug|x86
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Release|Any CPU.Build.0 = Release|Any CPU
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Release|x64.ActiveCfg = Release|x64
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Release|x64.Build.0 = Release|x64
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Release|x86.ActiveCfg = Release|x86
		{5D12AA37-CC30-4476-94AD-11C15DC65518}.Release|x86.Build.0 = Release|x86
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Debug|x64.ActiveCfg = Debug|x64
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Debug|x64.Build.0 = Debug|x64
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Debug|x86.ActiveCfg = Debug|x86
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Debug|x86.Build.0 = Debug|x86
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Release|Any CPU.Build.0 = Release|Any CPU
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Release|x64.ActiveCfg = Release|x64
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Release|x64.Build.0 = Release|x64
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Release|x86.ActiveCfg = Release|x86
		{B1B0E5F1-942A-476C-BEA4-8B9FFBCA04C6}.Release|x86.Build.0 = Release|x86
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Debug|x64.ActiveCfg = Debug|x64
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Debug|x64.Build.0 = Debug|x64
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Debug|x86.ActiveCfg = Debug|x86
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Debug|x86.Build.0 = Debug|x86
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Release|Any CPU.Build.0 = Release|Any CPU
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Release|x64.ActiveCfg = Release|x64
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Release|x64.Build.0 = Release|x64
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Release|x86.ActiveCfg = Release|x86
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC}.Release|x86.Build.0 = Release|x86
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Debug|x64.ActiveCfg = Debug|x64
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Debug|x64.Build.0 = Debug|x64
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Debug|x86.ActiveCfg = Debug|x86
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Debug|x86.Build.0 = Debug|x86
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Release|Any CPU.Build.0 = Release|Any CPU
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Release|x64.ActiveCfg = Release|x64
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Release|x64.Build.0 = Release|x64
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Release|x86.ActiveCfg = Release|x86
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1}.Release|x86.Build.0 = Release|x86
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Debug|x64.ActiveCfg = Debug|x64
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Debug|x64.Build.0 = Debug|x64
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Debug|x86.ActiveCfg = Debug|x86
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Debug|x86.Build.0 = Debug|x86
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Release|Any CPU.Build.0 = Release|Any CPU
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Release|x64.ActiveCfg = Release|x64
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Release|x64.Build.0 = Release|x64
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Release|x86.ActiveCfg = Release|x86
		{F55962DA-2615-4AFB-AD33-0F3D5987308C}.Release|x86.Build.0 = Release|x86
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Debug|x64.ActiveCfg = Debug|x64
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Debug|x64.Build.0 = Debug|x64
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Debug|x86.ActiveCfg = Debug|x86
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Debug|x86.Build.0 = Debug|x86
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Release|Any CPU.Build.0 = Release|Any CPU
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Release|x64.ActiveCfg = Release|x64
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Release|x64.Build.0 = Release|x64
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Release|x86.ActiveCfg = Release|x86
		{6BE48CF4-C2F0-44CB-95D8-7500A3CB430E}.Release|x86.Build.0 = Release|x86
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Debug|x64.ActiveCfg = Debug|x64
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Debug|x64.Build.0 = Debug|x64
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Debug|x86.ActiveCfg = Debug|x86
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Debug|x86.Build.0 = Debug|x86
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Release|Any CPU.Build.0 = Release|Any CPU
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Release|x64.ActiveCfg = Release|x64
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Release|x64.Build.0 = Release|x64
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Release|x86.ActiveCfg = Release|x86
		{FF04AB3E-E8C3-4452-9861-ED5DEE4181FC}.Release|x86.Build.0 = Release|x86
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Debug|x64.ActiveCfg = Debug|x64
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Debug|x64.Build.0 = Debug|x64
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Debug|x86.ActiveCfg = Debug|x86
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Debug|x86.Build.0 = Debug|x86
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Release|Any CPU.Build.0 = Release|Any CPU
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Release|x64.ActiveCfg = Release|x64
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Release|x64.Build.0 = Release|x64
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Release|x86.ActiveCfg = Release|x86
		{554C8784-954A-4E3D-9C79-D347DEF7E069}.Release|x86.Build.0 = Release|x86
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Debug|x64.ActiveCfg = Debug|x64
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Debug|x64.Build.0 = Debug|x64
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Debug|x86.ActiveCfg = Debug|x86
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Debug|x86.Build.0 = Debug|x86
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Release|Any CPU.Build.0 = Release|Any CPU
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Release|x64.ActiveCfg = Release|x64
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Release|x64.Build.0 = Release|x64
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Release|x86.ActiveCfg = Release|x86
		{7D35C9C8-6E9A-4ABB-9042-930BE5E26DC6}.Release|x86.Build.0 = Release|x86
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Debug|x64.ActiveCfg = Debug|x64
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Debug|x64.Build.0 = Debug|x64
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Debug|x86.ActiveCfg = Debug|x86
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Debug|x86.Build.0 = Debug|x86
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Release|Any CPU.Build.0 = Release|Any CPU
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Release|x64.ActiveCfg = Release|x64
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Release|x64.Build.0 = Release|x64
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Release|x86.ActiveCfg = Release|x86
		{80A26F08-6AE5-472D-BB13-B6FB9A37FDCB}.Release|x86.Build.0 = Release|x86
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Debug|x64.ActiveCfg = Debug|x64
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Debug|x64.Build.0 = Debug|x64
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Debug|x86.ActiveCfg = Debug|x86
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Debug|x86.Build.0 = Debug|x86
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Release|Any CPU.Build.0 = Release|Any CPU
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Release|x64.ActiveCfg = Release|x64
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Release|x64.Build.0 = Release|x64
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Release|x86.ActiveCfg = Release|x86
		{AE3BDF42-2F21-4CC3-9171-6CF2FDFDAB7A}.Release|x86.Build.0 = Release|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Debug|Any CPU.ActiveCfg = Debug|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Debug|x64.ActiveCfg = Debug|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Debug|x86.ActiveCfg = Debug|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Debug|x86.Build.0 = Debug|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Release|Any CPU.ActiveCfg = Release|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Release|x64.ActiveCfg = Release|x64
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Release|x64.Build.0 = Release|x64
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Release|x86.ActiveCfg = Release|x86
		{D26EA74F-8D44-453C-AD70-3789AFFDF85F}.Release|x86.Build.0 = Release|x86
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Debug|x64.ActiveCfg = Debug|x64
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Debug|x64.Build.0 = Debug|x64
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Debug|x86.ActiveCfg = Debug|x86
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Debug|x86.Build.0 = Debug|x86
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Release|Any CPU.Build.0 = Release|Any CPU
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Release|x64.ActiveCfg = Release|x64
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Release|x64.Build.0 = Release|x64
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Release|x86.ActiveCfg = Release|x86
		{A692A512-627A-4896-9D2D-4412FDD8C78C}.Release|x86.Build.0 = Release|x86
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Debug|x64.ActiveCfg = Debug|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Debug|x64.Build.0 = Debug|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Debug|x86.ActiveCfg = Debug|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Debug|x86.Build.0 = Debug|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Release|Any CPU.Build.0 = Release|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Release|x64.ActiveCfg = Release|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Release|x64.Build.0 = Release|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Release|x86.ActiveCfg = Release|Any CPU
		{6CDB7AB8-0A71-4950-8EC3-A5D8F43CB074}.Release|x86.Build.0 = Release|Any CPU
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Debug|Any CPU.ActiveCfg = Debug|x64
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Debug|Any CPU.Build.0 = Debug|x64
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Debug|x64.ActiveCfg = Debug|x64
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Debug|x64.Build.0 = Debug|x64
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Debug|x86.ActiveCfg = Debug|Any CPU
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Debug|x86.Build.0 = Debug|Any CPU
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Release|Any CPU.Build.0 = Release|Any CPU
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Release|x64.ActiveCfg = Release|x64
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Release|x64.Build.0 = Release|x64
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Release|x86.ActiveCfg = Release|Any CPU
		{2F0D1227-BE4F-4501-B3A2-66A753ED742C}.Release|x86.Build.0 = Release|Any CPU
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Debug|Any CPU.ActiveCfg = Debug|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Debug|Any CPU.Build.0 = Debug|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Debug|x64.ActiveCfg = Debug|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Debug|x64.Build.0 = Debug|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Debug|x86.ActiveCfg = Debug|Win32
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Debug|x86.Build.0 = Debug|Win32
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Release|Any CPU.ActiveCfg = Release|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Release|Any CPU.Build.0 = Release|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Release|x64.ActiveCfg = Release|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Release|x64.Build.0 = Release|x64
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Release|x86.ActiveCfg = Release|Win32
		{7158F27F-0F57-4216-A6EA-04FA24EFDDDF}.Release|x86.Build.0 = Release|Win32
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Debug|Any CPU.ActiveCfg = Debug|x64
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Debug|Any CPU.Build.0 = Debug|x64
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Debug|x64.ActiveCfg = Debug|x64
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Debug|x64.Build.0 = Debug|x64
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Debug|x86.ActiveCfg = Debug|Any CPU
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Debug|x86.Build.0 = Debug|Any CPU
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Release|Any CPU.Build.0 = Release|Any CPU
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Release|x64.ActiveCfg = Release|x64
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Release|x64.Build.0 = Release|x64
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Release|x86.ActiveCfg = Release|Any CPU
		{8A0EFF6F-A7BC-450A-AC29-D0F5CCD96BC3}.Release|x86.Build.0 = Release|Any CPU
		{5742C860-6313-4477-BF11-839C35AE5588}.Debug|Any CPU.ActiveCfg = Debug|x64
		{5742C860-6313-4477-BF11-839C35AE5588}.Debug|Any CPU.Build.0 = Debug|x64
		{5742C860-6313-4477-BF11-839C35AE5588}.Debug|x64.ActiveCfg = Debug|x64
		{5742C860-6313-4477-BF11-839C35AE5588}.Debug|x64.Build.0 = Debug|x64
		{5742C860-6313-4477-BF11-839C35AE5588}.Debug|x86.ActiveCfg = Debug|Any CPU
		{5742C860-6313-4477-BF11-839C35AE5588}.Debug|x86.Build.0 = Debug|Any CPU
		{5742C860-6313-4477-BF11-839C35AE5588}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{5742C860-6313-4477-BF11-839C35AE5588}.Release|Any CPU.Build.0 = Release|Any CPU
		{5742C860-6313-4477-BF11-839C35AE5588}.Release|x64.ActiveCfg = Release|x64
		{5742C860-6313-4477-BF11-839C35AE5588}.Release|x64.Build.0 = Release|x64
		{5742C860-6313-4477-BF11-839C35AE5588}.Release|x86.ActiveCfg = Release|Any CPU
		{5742C860-6313-4477-BF11-839C35AE5588}.Release|x86.Build.0 = Release|Any CPU
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Debug|Any CPU.ActiveCfg = Debug|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Debug|Any CPU.Build.0 = Debug|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Debug|x64.ActiveCfg = Debug|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Debug|x64.Build.0 = Debug|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Debug|x86.ActiveCfg = Debug|Win32
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Debug|x86.Build.0 = Debug|Win32
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Release|Any CPU.ActiveCfg = Release|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Release|Any CPU.Build.0 = Release|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Release|x64.ActiveCfg = Release|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Release|x64.Build.0 = Release|x64
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Release|x86.ActiveCfg = Release|Win32
		{9746F818-C1B9-461D-BD07-D20A103DC751}.Release|x86.Build.0 = Release|Win32
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Debug|Any CPU.ActiveCfg = Debug|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Debug|Any CPU.Build.0 = Debug|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Debug|x64.ActiveCfg = Debug|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Debug|x64.Build.0 = Debug|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Debug|x86.ActiveCfg = Debug|Win32
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Debug|x86.Build.0 = Debug|Win32
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Release|Any CPU.ActiveCfg = Release|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Release|Any CPU.Build.0 = Release|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Release|x64.ActiveCfg = Release|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Release|x64.Build.0 = Release|x64
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Release|x86.ActiveCfg = Release|Win32
		{CFA42830-B349-4978-B708-5B1BFA9C579B}.Release|x86.Build.0 = Release|Win32
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Debug|x64.ActiveCfg = Debug|x64
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Debug|x64.Build.0 = Debug|x64
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Debug|x86.ActiveCfg = Debug|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Debug|x86.Build.0 = Debug|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Release|Any CPU.Build.0 = Release|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Release|x64.ActiveCfg = Release|x64
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Release|x64.Build.0 = Release|x64
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Release|x86.ActiveCfg = Release|Any CPU
		{62E9AEEB-B322-48D0-B69B-FE64E62C461B}.Release|x86.Build.0 = Release|Any CPU
		{51E4211C-F281-11A3-9390-A6B54F703498}.Debug|Any CPU.ActiveCfg = Debug|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Debug|Any CPU.Build.0 = Debug|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Debug|x64.ActiveCfg = Debug|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Debug|x64.Build.0 = Debug|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Debug|x86.ActiveCfg = Debug|x86
		{51E4211C-F281-11A3-9390-A6B54F703498}.Debug|x86.Build.0 = Debug|x86
		{51E4211C-F281-11A3-9390-A6B54F703498}.Release|Any CPU.ActiveCfg = Release|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Release|Any CPU.Build.0 = Release|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Release|x64.ActiveCfg = Release|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Release|x64.Build.0 = Release|x64
		{51E4211C-F281-11A3-9390-A6B54F703498}.Release|x86.ActiveCfg = Release|x86
		{51E4211C-F281-11A3-9390-A6B54F703498}.Release|x86.Build.0 = Release|x86
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Debug|x64.ActiveCfg = Debug|x64
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Debug|x64.Build.0 = Debug|x64
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Debug|x86.ActiveCfg = Debug|x86
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Debug|x86.Build.0 = Debug|x86
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Release|Any CPU.Build.0 = Release|Any CPU
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Release|x64.ActiveCfg = Release|x64
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Release|x64.Build.0 = Release|x64
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Release|x86.ActiveCfg = Release|x86
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2}.Release|x86.Build.0 = Release|x86
	EndGlobalSection
	GlobalSection(SolutionProperties) = preSolution
		HideSolutionNode = FALSE
	EndGlobalSection
	GlobalSection(NestedProjects) = preSolution
		{DF415CAC-AE74-4D59-8E35-5F4C2C4192DC} = {5A596328-DBB3-47B5-B0CE-E7F6CB4591E0}
		{69D694A6-B029-4FE8-8429-F4E70DB8B5E1} = {5A596328-DBB3-47B5-B0CE-E7F6CB4591E0}
		{F55962DA-2615-4AFB-AD33-0F3D5987308C} = {5A596328-DBB3-47B5-B0CE-E7F6CB4591E0}
		{AAE73890-13EE-43C3-AC76-444B8F4E6EC2} = {B8EFCA5F-814F-285C-A8CB-F00F14650265}
	EndGlobalSection
	GlobalSection(ExtensibilityGlobals) = postSolution
		SolutionGuid = {4227F05D-F6EF-4571-9B94-6F3C05AA60DA}
	EndGlobalSection
EndGlobal


================================================
FILE: Jenkinsfile
================================================
pipeline {
    agent {
        label 'WinAgent'
    }

    stages {
        stage('Nuget restore') {
            steps {
                bat "nuget restore CapFrameX.sln"
            }
        }

        stage('Build') {
            stages {
                stage('Build Installer') {
                    stages {
                        stage('Build CX') {
                            steps {
                                bat "msbuild source\\CapFrameX\\CapFrameX.csproj /p:Configuration=Release /p:Platform=x64 /p:DeployOnBuild=true /p:VisualStudioVersion=17.0"
                            }
                        }

						stage('Build HWInfo') {
							steps {
								bat "msbuild source\\CapFrameX.Hwinfo\\CapFrameX.Hwinfo.vcxproj /p:SolutionDir=${pwd()}\\ /p:Configuration=Release /p:Platform=x64 /p:DeployOnBuild=true /p:VisualStudioVersion=17.0"
							}
						}
						
						stage('Build IGCL') {
							steps {
								bat "msbuild source\\CapFrameX.IGCL\\CapFrameX.IGCL.vcxproj /p:SolutionDir=${pwd()}\\ /p:Configuration=Release /p:Platform=x64 /p:DeployOnBuild=true /p:VisualStudioVersion=17.0"
							}
						}
			    
			    		stage('Build ADLX') {
							steps {
								bat "msbuild source\\CapFrameX.ADLX\\CapFrameX.ADLX.vcxproj /p:SolutionDir=${pwd()}\\ /p:Configuration=Release /p:Platform=x64 /p:DeployOnBuild=true /p:VisualStudioVersion=17.0"
							}
						}

                        stage('Build Installer') {
                            steps {
                                bat "msbuild source\\CapFrameXInstaller\\CapFrameXInstaller.wixproj /p:SolutionDir=${pwd()}\\ /p:Configuration=Release /p:Platform=x64 /p:DeployOnBuild=true /p:VisualStudioVersion=17.0"
                            }
                        }

                        stage('Build Bootstrapper') {
                            steps {
                                bat "msbuild source\\CapFrameXBootstrapper\\CapFrameXBootstrapper.wixproj /p:SolutionDir=${pwd()}\\ /p:Configuration=Release /p:Platform=x64 /p:DeployOnBuild=true /p:VisualStudioVersion=17.0"
                            }
                        }
                    }
                }
            }
        }
		
		stage('Publish') {
			environment {
                filename = getFilename()
                uploadPath = getUploadPath()
				branch = getBranch()
			}
            stages {
                stage('Prepare Portable') {
                    steps {
                        bat "copy portable.json.sample source\\CapFrameX\\bin\\x64\\Release\\portable.json"
                    }
                }

                stage('Create Archive') {
                    steps {
                        zip archive: false, dir: 'source/CapFrameXBootstrapper/bin/x64/Release', glob: 'CapFrameXBootstrapper.exe', zipFile: "${filename}_installer.zip"
						zip archive: false, dir: 'source/CapFrameX/bin/x64/Release', glob: '**/*', zipFile: "${filename}_portable.zip"
                    }
                }

                stage('Upload Archives') {
                    steps {
						azureUpload blobProperties: [cacheControl: '', contentEncoding: '', contentLanguage: '', contentType: '', detectContentType: true], containerName: 'builds', fileShareName: '', filesPath: '*.zip', storageCredentialId: 'cxblobs-azure-storage', storageType: 'blobstorage', virtualPath: "${branch}/${BUILD_NUMBER}/"
                    }
                }
            }
		}
    }
}
def getBranch() {
	return "${env.GIT_BRANCH}";
}

def getFilename() {
    return "${env.TAG_NAME}".startsWith('v') ? "${env.TAG_NAME}" : "${env.GIT_COMMIT}"
}

def getUploadPath() {
    def branch = "${env.GIT_BRANCH}".replace("/", "__")
    def date = "${(new Date()).format( 'dd.MM.yyyy' )}"
    return "${env.TAG_NAME}".startsWith('v') ? "${env.CAPFRAMEX_REPO}/${env.TAG_NAME}" : "${env.CAPFRAMEX_REPO}/${branch}/${date}"
}


================================================
FILE: LICENSE
================================================
MIT License

Copyright (c) 2018-2024 DevTechProfile

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

------------------------------------------------------------------------------

The binaries of the Open Hardware Monitor have been made available by the Open 
Hardware Monitor Project under the Mozilla Public License 2.0 (MPL).

The source code of the Open Hardware Monitor is available under licenses which 
are both free and open source. Most of it is available under the Mozilla 
Public License 2.0 (MPL).

The remainder of the software which is not under the Mozilla Public License 2.0 (MPL) 
is available under one of a variety of other licenses which are given below.

Aga.Controls License
This license applies to the Aga.Controls assembly (TreeViewAdv component).

Copyright (c) 2009, Andrey Gliznetsov (a.gliznetsov@gmail.com)

All rights reserved.

Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met

- Redistributions of source code must retain the above copyright notice, this list
of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation andor other
materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

WinRing0 License
This license applies to the WinRing0 device drivers.

Copyright (c) 2007-2009 OpenLibSys.org. All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
   notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
   notice, this list of conditions and the following disclaimer in the
   documentation and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

jQuery License
This license applies to the jQuery JavaScript library.

Copyright (c) 2012 John Resig, http://jquery.com/

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal 
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
THE SOFTWARE.

Knockout License
This license applies to the Knockout JavaScript library.

Copyright (c) 2012 Steven Sanderson, Roy Jacobs

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal 
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
THE SOFTWARE.

OxyPlot License
This license applies to the OxyPlot library.

Copyright (c) 2012 Oystein Bjorke

Permission is hereby granted, free of charge, to any person obtaining a copy 
of this software and associated documentation files (the "Software"), to deal 
in the Software without restriction, including without limitation the rights 
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 
copies of the Software, and to permit persons to whom the Software is 
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in 
all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 
THE SOFTWARE.

LINQBridge License
This license applies to the LINQBridge library.

Copyright (c) 2007-2009 Atif Aziz, Joseph Albahari. All rights reserved.

Redistribution and use in source and binary forms, with or without 
modification, are permitted provided that the following conditions 
are met:

- Redistributions of source code must retain the above copyright notice, this list 
of conditions and the following disclaimer. 
- Redistributions in binary form must reproduce the above copyright notice, this 
list of conditions and the following disclaimer in the documentation and/or other 
materials provided with the distribution. 
- Neither the name of the original authors nor the names of its contributors may 
be used to endorse or promote products derived from this software without specific 
prior written permission. 

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR 
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.


================================================
FILE: PORTABLE_MODE.md
================================================
# CapFrameX Portable Mode

## Overview

CapFrameX now supports a portable mode that allows the application to run entirely from a single folder without writing to system directories. This is useful for running from USB drives, network shares, or keeping multiple isolated installations.

## How It Works

Portable mode is activated by placing a `portable.json` file in the same directory as the CapFrameX executable. When the application starts, it checks for this file and redirects all data storage to paths relative to the application directory.

### Key Features

- **Self-contained**: All configuration, captures, screenshots, and logs are stored relative to the application folder
- **No registry modifications**: The application doesn't write to the Windows registry in portable mode
- **No system folder usage**: Bypasses `%AppData%` and `Documents` folders entirely
- **Configurable paths**: All storage paths can be customized via `portable.json`

## portable.json Configuration

Create a `portable.json` file in the CapFrameX application directory with the following structure:

```json
{
  "portable": true,
  "paths": {
    "config": "./Portable/Config",
    "captures": "./Portable/Captures",
    "screenshots": "./Portable/Screenshots",
    "logs": "./Portable/Logs",
    "cloud": "./Portable/Captures/Cloud"
  }
}
```

### Configuration Options

| Property | Description | Default |
|----------|-------------|---------|
| `portable` | Enables portable mode when `true` | `true` |
| `paths.config` | Configuration files (AppSettings.json, overlay configs, sensor config, UI state) | `./Portable/Config` |
| `paths.captures` | Capture recordings | `./Portable/Captures` |
| `paths.screenshots` | Screenshot storage | `./Portable/Screenshots` |
| `paths.logs` | Log files | `./Portable/Logs` |
| `paths.cloud` | Cloud download directory | `./Portable/Captures/Cloud` |

All paths are relative to the application directory. You can use `./` or `.\` prefix, or just the folder name.

## Requirements

When running in portable mode, the following dependencies must be installed on the system:

- **.NET 9.0 Desktop Runtime (x64)** - [Download](https://dotnet.microsoft.com/download/dotnet/9.0)
- **Visual C++ 2015-2022 Redistributable (x64)** - [Download](https://aka.ms/vs/17/release/vc_redist.x64.exe)

The application will check for these dependencies on startup and display a message if any are missing.

## Creating a Portable Distribution

1. Copy the CapFrameX application files to a folder
2. Create a `portable.json` file with the configuration above
3. (Optional) Pre-create the `Portable` subdirectory with: `Config`, `Captures`, `Screenshots`, `Logs`
4. The application is now portable and can be moved to any location

## Behavior Differences

| Feature | Installed Mode | Portable Mode |
|---------|---------------|---------------|
| Config storage | `%AppData%\CapFrameX\Configuration` | `./Portable/Config` |
| Captures storage | `Documents\CapFrameX\Captures` | `./Portable/Captures` |
| Screenshots | `Documents\CapFrameX\Screenshots` | `./Portable/Screenshots` |
| Logs | `%AppData%\CapFrameX\Logs` | `./Portable/Logs` |
| UI state (window size, column widths) | `%LocalAppData%\Jot` | `./Portable/Config` |
| Window title | "CapFrameX" | "CapFrameX Portable" |
| Config migration | Migrates old settings | Skipped |
| Start with Windows | Available | Disabled |

## Notes

- Settings configured in portable mode are stored in the portable config folder and won't affect or be affected by an installed version
- The `portable.json` file must be valid JSON; if parsing fails, the application falls back to installed mode
- Directories are automatically created if they don't exist


================================================
FILE: README.md
================================================
![Screenshot](images/CX_Header_Logo_Wide.jpg)
# CapFrameX
Frametimes capture and analysis tool based on Intel's [PresentMon](https://github.com/GameTechDev/PresentMon). Overlay provided by [Rivatuner Statistics Server](https://www.guru3d.com/content-page/rivatuner.html). 

# Remark in our own interest
If you are a reviewer or a youtuber using CapFrameX to get your data, it would be nice to mention us and link to our software.
If you want to use images of the CapFrameX analysis, you could use the built in screenshot function so that our logo and name gets added to the images.

# Release
Download link: https://github.com/DevTechProfile/CapFrameX/releases

# Troubleshooting & Known Issues
The following tips address the most common issues reported by users and can help resolve stability, overlay, and capture-related problems efficiently. We recommend working through them in order if you encounter unexpected behavior.

1. **Ensure you are running the latest version**  
   If you experience application crashes or unstable behavior, verify that you have installed **CapFrameX v1.7.8 Patch 1** or newer. Many known issues have been resolved in this patch. If you were previously using version 1.7.7, we recommend uninstalling CapFrameX before installing the new version.

2. **Reset application settings**  
   In some cases, corrupted or outdated configuration files may cause problems. Deleting  
   `%appdata%/CapFrameX/Configuration/AppSettings.json`  
   will reset CapFrameX to its default settings and often resolves startup or UI-related issues.

3. **Reset overlay configuration files**  
   If overlay-related problems persist, try deleting the overlay configuration files located at  
   `%appdata%/CapFrameX/Configuration/OverlayEntryConfiguration_(0/1/2).json`.  
   These files will be recreated automatically on the next application start.

4. **Restore missing or zero-value overlay entries**  
   When overlay entries are missing or display constant zero values, open the **Overlay** tab and use the **Reset** button to restore all overlay entries to a valid default state.

5. **Fix incorrect overlay entry order**  
   If the order of overlay entries appears inconsistent or unintentionally rearranged, use the **Sort** button in the **Overlay** tab to restore a clean and logical ordering.

6. **Resolve frametime anomalies after updates**  
   In rare cases, existing background capture processes can interfere with CapFrameX after an update. If you encounter frametime issues, close all running **PresentMon** processes before installing or launching CapFrameX v1.7.8.

7. **Avoid conflicts with other monitoring tools**  
   Applications such as **HWiNFO** or **AIDA64** that implement their own FPS or frametime metrics may conflict with CapFrameX’s capture service, as they also rely on PresentMon-based mechanisms. Disabling overlapping FPS or frametime monitoring features in those tools is strongly recommended when using CapFrameX.

# Capture frametimes
![Screenshot](images/02_capture.png)

# Overlay
![Screenshot](images/04_overlay_options.png)

# Analysis
![Screenshot](images/05_analysis.png)

# Aggregation
![Screenshot](images/06_aggregation.png)

# Comparison
![Screenshot](images/07_comparison_bar.png)
![Screenshot](images/08_comparison_graph.png)

# Sensor
![Screenshot](images/08b_sensor.png)

# Report table (Excel)
![Screenshot](images/09_report.png)

# Cloud
![Screenshot](images/12_cloud.png)

# MCP Server (AI integration)

CapFrameX ships an in-process MCP server that lets AI clients (Claude Code, Claude Desktop, MCP Inspector) read recorded captures, compute statistics, diagnose issues, and query the live system. The server runs only while CapFrameX is running and is reachable on `http://localhost:<WebservicePort>/mcp` (default port `1337`; if taken, CapFrameX falls back to a free port and persists the choice in `AppSettings.json`).

No additional install. The MCP server is part of `CapFrameX.exe`.

## Setup with Claude Code

1. Make sure CapFrameX is running.
2. Look up the active port in `%appdata%/CapFrameX/Logs/CapFrameX.log` (search for the line `MCP endpoint available at http://localhost:<port>/mcp`) or open `%appdata%/CapFrameX/Configuration/AppSettings.json` and read `WebservicePort`.
3. Register the server with Claude Code (one-time):

   ```bash
   claude mcp add -s user capframex --transport http http://localhost:<port>/mcp
   ```

4. Verify:

   ```bash
   claude mcp list
   ```

   Expected:

   ```
   capframex: http://localhost:<port>/mcp (HTTP) - ✓ Connected
   ```

5. In any new Claude Code session, type `/mcp` to see the server in the active connection list. The tools become available to the model.

If CapFrameX is not running, the connection appears as **disconnected**. Start CapFrameX and the connection comes back live.

## Setup with Claude Desktop

Add this to your `claude_desktop_config.json` (Settings → Developer → Edit Config):

```json
{
  "mcpServers": {
    "capframex": {
      "url": "http://localhost:<port>/mcp"
    }
  }
}
```

Restart Claude Desktop. The CapFrameX tools appear in the MCP picker.

## Available tools

| Tool | Purpose |
| --- | --- |
| `cfx_ping` | Connectivity check (returns `pong`). |
| `cfx_list_records` | Lists capture records from the configured directory; optional substring filter on game/process. |
| `cfx_get_record` | Full metadata of a record (system info, run count, settings). |
| `cfx_search_records` | Free-text search across game/comment/CPU/GPU/OS/RAM. |
| `cfx_get_metrics` | FPS metrics (Average, P1, P0.2, Min, Max, AdaptiveStd, …) — single run or all runs. |
| `cfx_compare_records` | Side-by-side metric table across multiple records with absolute and percentage deltas. |
| `cfx_get_sensor_summary` | Per-sensor avg/min/max for CPU/GPU/RAM/VRAM channels. |
| `cfx_analyze_bottleneck` | Classifies a run as cpu-bound, gpu-bound, balanced, thermal-throttling, or power-limited (with confidence + reasoning). |
| `cfx_diagnose_capture` | Scans recent log entries for capture-related failures. Pattern library: ETW conflicts, anti-cheat, permissions, PresentMon errors, blacklisted processes, etc. |
| `cfx_diagnose_general` | Same as above but with focus area (`capture` / `sensors` / `overlay` / `all`). |
| `cfx_get_capture_timeline` | Chronological capture-related events from the log (hotkey, PresentMon start/stop, session save, errors). |
| `cfx_get_current_system` | Live system info: CPU, GPU, RAM, OS, motherboard, Resizable BAR (HW + D3D + Vulkan), HAGS, GameMode, PCI BAR sizes. |
| `cfx_get_capture_status` | Read-only capture state: isCapturing, isLocked, current state (Started, Processing, Stopped, …). |

All tools are read-only. They do not start or stop captures and do not modify settings.

## Example interactions

Ask Claude in natural language. Below are three concrete examples that exercise multiple tools.

### 1. "Compare my last three Cyberpunk records"

Claude internally calls `cfx_search_records` with `"Cyberpunk"`, takes the three most recent ids, then calls `cfx_compare_records` with default metrics (Average, P1, P0.2, Min, Max). Output: a tabular comparison with deltas highlighting which run was best/worst.

### 2. "Why is the latest Spider-Man 2 capture only at 80 fps?"

Claude calls `cfx_list_records` filtered by Spider-Man, picks the newest, then calls `cfx_get_metrics` to confirm the average, `cfx_get_sensor_summary` to see CPU/GPU load, and `cfx_analyze_bottleneck` to get a verdict. Typical answer: *"GPU load averaged 74 %, CPU max-thread load 82 % — the run is CPU-bound; this is consistent with Spider-Man 2's known DX12 main-thread bottleneck."*

### 3. "My benchmark didn't get recorded. Why?"

Claude calls `cfx_diagnose_capture` (default 30-min lookback) and `cfx_get_capture_timeline`. Typical findings: an ETW session conflict (FrameView SDK still installed), a blacklisted process, missing administrator rights, or an anti-cheat that blocked PresentMon — each with a concrete suggested fix.

## Configuration

In `%appdata%/CapFrameX/Configuration/AppSettings.json`:

| Key | Default | Effect |
| --- | --- | --- |
| `McpEnabled` | `true` | Toggle the MCP module on/off. When `false`, the rest of the local API still runs. |
| `WebservicePort` | `"1337"` | Shared with the existing local API. The MCP endpoint lives at `/mcp` on that same port. |

To disable MCP: set `McpEnabled` to `false` and restart CapFrameX. Logs related to the MCP server appear in the standard CapFrameX log file (`%appdata%/CapFrameX/Logs/CapFrameX.log`).

# Instruction manual
Learn how to use CapFrameX.

## Record list
This list is always located at the left section, regardless of the view you're currently in.

It constantly observes the output directory so every capture will show up here as soon as the capture has finished.
This also includes every OCAT or PresentMon capture you put into that directory.

Changing directories:  
To change the directory, use the expander on the left where you can select your main folder by double clicking on the address line and get a tree view of all subfolders within that main folder.
Using the right click context menu you can create or delete folders directly in the tree view and also open any selected folder in explorer. You can also move record files to other folders through the context menu in the record list itself.

Changing record info:  
At the bottom of the record list you can see and change the CPU, GPU and RAM description and add a custom comment to every capture.
Also you can edit the game name, since the process name is used as default. 
This gets saved in a process list file that is being compared with a list we update on every new version of CapFrameX to add new games that aren't already on your list. 

## Global Navigation Bar
Located at the top  
Contains all the different views, a screenshot button, a login button (for additional cloud services), a direct link to the CX website and an options menu. 
The screenshot button takes a screenshot of the current view excluding the record list.

## Settings (Options)
![Screenshot](images/01_global_options.png)
* Graph filter window size = The time period in which the filtered FPS graphs are being averaged (Analysis & Comparison View)
* FPS values decimals = The number of decimals for the FPS values
* Screenshot directory = The directory in which your screenshots are saved. 
* Use "MsBetweenDisplayChange" metrics. Uses diplay times for metric calculation. Enble this option when using Frame Generation.
* Use PC Latency. Still beta state. Disable if you encounter frame time issues. Restart CapFameX after changing the option.
* Capture file mode = How capture files are saved  
  JSON: Standard JSON file  
  JSON + CSV: Additional CSV file that won't be used by CX but can be opened to get a better view on the raw PresentMon data  

## Settings (Hardware)
![Screenshot](images/01_global_options_hardware.png)
* Primary Graphics Adapter. Select the primary graphics adapter for sensor and overlay management. Auto (default) removes iGPU when it least one dGPU is detected.
* Hardware info source = What will be written into the capture file as your CPU, GPU and RAM config.  
  Automatic detection: What's delivered by the system  
  Custom description: What you write into the text boxes below
* Use "TBP Sim" sensor values (AMD graphics cards) if available

## Settings (App)
![Screenshot](images/01_global_options_app.png)
* Start with windows & Start minimized = Autostart option and starting in tray
* "Dark Mode" UI color mode
* Receive notifications to get important information about the software and the project

## Capture view
Here you can set your capture hotkey, the capture time (0=unlimited), choose if and how precisely you want to log sensor data (like CPU/GPU load and power) and set the hotkey response sounds.  
An info text always informs you what's going on with the capture service and also tells you what to do in certain situations.
For more detailed information about the capture events, you can take a look at the infobox which can be expanded from the top.

## How to make a capture
The process you want to capture has to be present in the "Running processes" list. This list automatically lists all running processes from which frametimes can be captured.

For the easiest way of just getting into a game and pressing the hotkey to start a capture, this list may only contain one single process, otherwise the service won't know which process you want captured.
If you have more than one process detected, you can still select the one you want and capturing will work just fine.
However you wouldn't want to tab out of your game to do this. This is where our ignore list comes into play.

With the buttons below the two lists you can add or remove any process from the ignore list, the ideal scenario is a completely empty running processes list at the start of CapFrameX.
With this, you can just start your game and since it'll be the only process in the list, just push the hotkey.  
In case a process wasn't detected correctly you can try to rescan processes with the button at the top of the running processes list.

The ignore list entries are drawn from the same process list that contains your game names, which gets updated with our own list on every new Version of CapFrameX.

## Overlay view
Contains the settings for the items displayed in the OSD as well as the settings for a run history and the aggregation function.  

Left side  
Overlay items list where you can set the items you want to see in the OSD and change their order by drag and drop. Items with the same group name will be displayed within a single line.
Three profiles to save different overlay configurations.
Overlay hotkey to show or hide CX items in OSD. This doesn't hide RTSS completely like the Afterburner hotkey does. If you have AB or any other App that uses RTSS running together with CX, only CX items will disappear.
Right side  
Run history and aggregation options  
Run history to set a number of runs for which you get a simple analysis directly in the OSD. If the history is full, any additional run will replace the oldest one.    
Aggregation to combine the runs in the history to a single record file once the history is full, while marking outliers within the history.  
This doesn't take the calculated performance parameters of each record file and calculates an average out of them. It takes the raw frametimes of each record file and puts them into a new file, calculating every parameter based on that set of frametimes.  
Aggregation outlier handling: A full history is checked for outliers using the median of a selectable metric and an also selectable percentage value.
	"Mark & use": Outliers are marked, but all runs will be used for the aggregation.
	"Mark & replace": If outliers exist, you have to do additional runs to replace them. Aggregation triggers when you have a full history without outliers.  

Overlay items options  
Here you can set colors, limits and font sizes for each individual overlay entry. The currently selected entry is always displayed at the top.  
If you want to apply one or more of these settings to multiple entries, e.g. red color above a limit of 95 for all CPU thread loads, you can set them for one entry and then click on the "Sensor type" button at the bottom right side.
This will apply the settings for all entries that are CPU loads. The same is possible for entries with the same group name, e.g. if you want a certain group color for all entries with group name X.
The group name or sensor type for which settings are applied is always displayed next to the buttons.  
At the bottom left side you can set separators for all currently used group names, setting one separator for a group results in an empty line above that group.

## Analysis view
This is where you can analyse the captures you made one by one.

At the tops you can choose between frametime graphs, FPS graphs and L-shapes.  
For the frametime graphs you can set a y-axis scale so that you are always looking at the same ms range for each record.  
For the FPS graphs you can choose a filter mode so that you can either see the raw FPS data or a time based average filter to see a more clear FPS trendline.
Below that you have your performance parameters like min, max, avg and percentiles on the left.  
On the right you have three tabs, the first one is a pie chart which shows the amount of time you had stuttering (frametimes above 2.5x average (default)) or low FPS (frametimes above converted 25FPS (default)), the second one is a diagram where you can see how many frames were below or above specific FPS thresholds.
If you chose to log sensor data for a record, two additional options are enabled: You can see the min, avg and max values of some basic sensors over the course of the benchmark as well as adding additional graphs to show you CPU and GPU load directly in the frametime chart.  
At the bottom is a toolbar where you can change the performance parameters, toggle the additional sensor data graphs, remove unusual outliers from the graphs and activate a range slider that you can also use to cut a record and saving it as a new file.
On the very right side of the page, there is a "System info" expander which shows all the HW and SW information available for the selected benchmark.

## Aggregation view
Here you can manually aggregate records that were already saved.
Add them to the list and set the metrics you want to be displayed as well as the outlier handling options.
Outliers will be marked red and you can choose to include or exclude them for the aggregation. On aggregation you'll see a simple result line and a new record file is created containing all the frametime data of the aggregated records.

## Comparison View
Here you can compare multiple records.  
With a double-click from the record list you can add the captures to the comparison list and with a click on the comparison list entry you can select them in the record list. With the button at the end you can remove them all from the list.

The first tab shows you the records as bar charts.  
If you compare records from just a single game, this game is set as a title above the diagram. If you compare records from multiple games, the names are labeled on the bars.
In addition you have two adjustable contexts that are set as labels for each record.
At the bottom is a toolbar where you can change the sorting and adjust the displayed metrics as well as the contexts.  
For screenshot purposes you can activate "Custom title" to type in a title at the top yourself.
The "Grouping" toggle switches between two sorting modes:  
off-> all records are sorted by FPS  
on-> records are sorted by game, then by FPS  

The second tab shows you the frametime + FPS graphs and L-shapes.  
You can highlight the graphs with a mouseover in the comparison list and also change their color or hide them.
The toolbar now shows you the options to activate the range slider and the context legend for the frametime graphs. The context setting is shared between the two tabs.

## Chart control
| Action | Gesture |
| --- | --- |
Pan | Right mouse button, arrow keys(+ Ctrl = slow pan) |
Pan(X-axis) | Shift + right mouse button |
Pan(Y-axis) | Ctrl + right mouse button  |
Zoom | Mouse wheel |
Zoom(X-axis) | Shift + mouse wheel |
Zoom(Y-axis) | Ctrl + mouse wheel |
Zoom by rectangle | Middle mouse button |
Reset | Left or middle mouse button double-click, ‘A’, Home |
Show ‘tracker’ | Left mouse button |
Copy values| Right mouse button context menu |

You can also zoom/pan a single axis by positioning the mouse cursor over the axis before starting the zoom/pan.  
This manual is also available through the context menu.

## Sensor View
In this view you can choose to log sensor data along with your frametimes. You can freely select any number of sensors available and when selecting a record that contains sensor data, all sensor values are displayed in the list on the right.
These values can be copied to clipboard via context menu, either as min/avg/max values like seen in the list or as raw values with every single sensor reading included.

## Report view
This is a simple view where you can add your records to see all the relevant parameters all at once. You can also just copy them with a right-click to add them into any other program. This is also possible for the graphs and performance parameters in the single record view.

## Cloud view
In this view you can upload and download records to easily share them with others.

To upload records, add them to the upload list and click the upload button. Once the upload is complete, you'll get an ID that others can use to download your records in the download section below.
To download records, just add the ID and click the download button.

If you log in before the uploads, you can see all your uploads and IDs on capframex.com. 
The optional description next to the upload button is to name your upload to easily find them on the website. It doesn't have any effect if you're not logged in.

If you activated the process list options on the right, new game names you add and new processes you ignore can be automatically added to our online list and your own list can be synced with that online list so that you always get the latest entries.
This doesn't affect any processes you already have on your list. If our online list contains the same process as yours but with a different game name, your entry will not be changed. The same goes for the ignored status of a process.

## Export options (context menu)
* Analysis: frametime values (f), frametime points (t, f(t)), FPS values, quantiles
* Report: parameter table
* Synchronization: display changed times(dc), histogram data

Potential conflicts with the Nuget packages can be solved via Package Manger Console. Just type "Update-Package -reinstall". The calling application must run as administrator. See "MonitoringLibTestApp" example code how to integrate the customized library.

# Requirements
* .NET 9.0 (no installer check, must be installed manually)
* .NET 4.7.2 (installer check)
* Microsoft Visual C++ Redistributable Package (installer check)

# Build requirements
* MS Visual Studio 2022
* WiX V3.14.1
* WiX Toolset Visual Studio 2022 Extension
* WiX Toolset and VS Extension: http://wixtoolset.org/releases/
* C++ MFC build tools

# Build settings
* Solution Platform x64

# Dev roadmap
* CapFrameX 2.0 with service-client architecture


================================================
FILE: benchlab-service/PMD_Service.deps.json
================================================
{
  "runtimeTarget": {
    "name": ".NETCoreApp,Version=v9.0",
    "signature": ""
  },
  "compilationOptions": {},
  "targets": {
    ".NETCoreApp,Version=v9.0": {
      "PMD_Service/1.0.0": {
        "dependencies": {
          "BENCHLAB_Core": "1.0.0",
          "Microsoft.Extensions.Hosting": "9.0.3",
          "Microsoft.Extensions.Hosting.WindowsServices": "9.0.3"
        },
        "runtime": {
          "PMD_Service.dll": {}
        }
      },
      "Microsoft.Extensions.Configuration/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.Abstractions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.Abstractions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.Binder/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.Binder.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.CommandLine/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.CommandLine.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.EnvironmentVariables/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.EnvironmentVariables.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.FileExtensions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
          "Microsoft.Extensions.FileProviders.Physical": "9.0.3",
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.FileExtensions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.Json/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.Configuration.FileExtensions": "9.0.3",
          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.Json.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Configuration.UserSecrets/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.Configuration.Json": "9.0.3",
          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
          "Microsoft.Extensions.FileProviders.Physical": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Configuration.UserSecrets.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.DependencyInjection/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.DependencyInjection.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.3": {
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.DependencyInjection.Abstractions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Diagnostics/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Diagnostics.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Diagnostics.Abstractions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Diagnostics.Abstractions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.FileProviders.Abstractions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.FileProviders.Abstractions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.FileProviders.Physical/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
          "Microsoft.Extensions.FileSystemGlobbing": "9.0.3",
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.FileProviders.Physical.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.FileSystemGlobbing/9.0.3": {
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.FileSystemGlobbing.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Hosting/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.Configuration.Binder": "9.0.3",
          "Microsoft.Extensions.Configuration.CommandLine": "9.0.3",
          "Microsoft.Extensions.Configuration.EnvironmentVariables": "9.0.3",
          "Microsoft.Extensions.Configuration.FileExtensions": "9.0.3",
          "Microsoft.Extensions.Configuration.Json": "9.0.3",
          "Microsoft.Extensions.Configuration.UserSecrets": "9.0.3",
          "Microsoft.Extensions.DependencyInjection": "9.0.3",
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Diagnostics": "9.0.3",
          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
          "Microsoft.Extensions.FileProviders.Physical": "9.0.3",
          "Microsoft.Extensions.Hosting.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging.Configuration": "9.0.3",
          "Microsoft.Extensions.Logging.Console": "9.0.3",
          "Microsoft.Extensions.Logging.Debug": "9.0.3",
          "Microsoft.Extensions.Logging.EventLog": "9.0.3",
          "Microsoft.Extensions.Logging.EventSource": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Hosting.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Hosting.Abstractions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Diagnostics.Abstractions": "9.0.3",
          "Microsoft.Extensions.FileProviders.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Hosting.Abstractions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Hosting.WindowsServices/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Hosting": "9.0.3",
          "Microsoft.Extensions.Logging.EventLog": "9.0.3",
          "System.ServiceProcess.ServiceController": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Hosting.WindowsServices.dll": {
            "assemblyVersion": "9.0.0.3",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging.Abstractions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.Abstractions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging.Configuration/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration": "9.0.3",
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.Configuration.Binder": "9.0.3",
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3",
          "Microsoft.Extensions.Options.ConfigurationExtensions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.Configuration.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging.Console/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging.Configuration": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.Console.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging.Debug/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.Debug.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging.EventLog/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3",
          "System.Diagnostics.EventLog": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.EventLog.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Logging.EventSource/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Logging": "9.0.3",
          "Microsoft.Extensions.Logging.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3",
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Logging.EventSource.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Options/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Options.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Options.ConfigurationExtensions/9.0.3": {
        "dependencies": {
          "Microsoft.Extensions.Configuration.Abstractions": "9.0.3",
          "Microsoft.Extensions.Configuration.Binder": "9.0.3",
          "Microsoft.Extensions.DependencyInjection.Abstractions": "9.0.3",
          "Microsoft.Extensions.Options": "9.0.3",
          "Microsoft.Extensions.Primitives": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Options.ConfigurationExtensions.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "Microsoft.Extensions.Primitives/9.0.3": {
        "runtime": {
          "lib/net9.0/Microsoft.Extensions.Primitives.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "runtime.linux-arm.runtime.native.System.IO.Ports/7.0.0": {
        "runtimeTargets": {
          "runtimes/linux-arm/native/libSystem.IO.Ports.Native.so": {
            "rid": "linux-arm",
            "assetType": "native",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "runtime.linux-arm64.runtime.native.System.IO.Ports/7.0.0": {
        "runtimeTargets": {
          "runtimes/linux-arm64/native/libSystem.IO.Ports.Native.so": {
            "rid": "linux-arm64",
            "assetType": "native",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "runtime.linux-x64.runtime.native.System.IO.Ports/7.0.0": {
        "runtimeTargets": {
          "runtimes/linux-x64/native/libSystem.IO.Ports.Native.so": {
            "rid": "linux-x64",
            "assetType": "native",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "runtime.native.System.IO.Ports/7.0.0": {
        "dependencies": {
          "runtime.linux-arm.runtime.native.System.IO.Ports": "7.0.0",
          "runtime.linux-arm64.runtime.native.System.IO.Ports": "7.0.0",
          "runtime.linux-x64.runtime.native.System.IO.Ports": "7.0.0",
          "runtime.osx-arm64.runtime.native.System.IO.Ports": "7.0.0",
          "runtime.osx-x64.runtime.native.System.IO.Ports": "7.0.0"
        }
      },
      "runtime.osx-arm64.runtime.native.System.IO.Ports/7.0.0": {
        "runtimeTargets": {
          "runtimes/osx-arm64/native/libSystem.IO.Ports.Native.dylib": {
            "rid": "osx-arm64",
            "assetType": "native",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "runtime.osx-x64.runtime.native.System.IO.Ports/7.0.0": {
        "runtimeTargets": {
          "runtimes/osx-x64/native/libSystem.IO.Ports.Native.dylib": {
            "rid": "osx-x64",
            "assetType": "native",
            "fileVersion": "0.0.0.0"
          }
        }
      },
      "System.Diagnostics.EventLog/9.0.3": {
        "runtime": {
          "lib/net9.0/System.Diagnostics.EventLog.dll": {
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        },
        "runtimeTargets": {
          "runtimes/win/lib/net9.0/System.Diagnostics.EventLog.Messages.dll": {
            "rid": "win",
            "assetType": "runtime",
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "0.0.0.0"
          },
          "runtimes/win/lib/net9.0/System.Diagnostics.EventLog.dll": {
            "rid": "win",
            "assetType": "runtime",
            "assemblyVersion": "9.0.0.0",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "System.IO.Ports/7.0.0": {
        "dependencies": {
          "runtime.native.System.IO.Ports": "7.0.0"
        },
        "runtime": {
          "lib/net7.0/System.IO.Ports.dll": {
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51805"
          }
        },
        "runtimeTargets": {
          "runtimes/unix/lib/net7.0/System.IO.Ports.dll": {
            "rid": "unix",
            "assetType": "runtime",
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51805"
          },
          "runtimes/win/lib/net7.0/System.IO.Ports.dll": {
            "rid": "win",
            "assetType": "runtime",
            "assemblyVersion": "7.0.0.0",
            "fileVersion": "7.0.22.51805"
          }
        }
      },
      "System.ServiceProcess.ServiceController/9.0.3": {
        "dependencies": {
          "System.Diagnostics.EventLog": "9.0.3"
        },
        "runtime": {
          "lib/net9.0/System.ServiceProcess.ServiceController.dll": {
            "assemblyVersion": "9.0.0.3",
            "fileVersion": "9.0.325.11113"
          }
        },
        "runtimeTargets": {
          "runtimes/win/lib/net9.0/System.ServiceProcess.ServiceController.dll": {
            "rid": "win",
            "assetType": "runtime",
            "assemblyVersion": "9.0.0.3",
            "fileVersion": "9.0.325.11113"
          }
        }
      },
      "BENCHLAB_Core/1.0.0": {
        "dependencies": {
          "System.IO.Ports": "7.0.0"
        },
        "runtime": {
          "BENCHLAB_Core.dll": {
            "assemblyVersion": "1.0.0.0",
            "fileVersion": "1.0.0.0"
          }
        }
      }
    }
  },
  "libraries": {
    "PMD_Service/1.0.0": {
      "type": "project",
      "serviceable": false,
      "sha512": ""
    },
    "Microsoft.Extensions.Configuration/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-RIEeZxWYm77+OWLwgik7DzSVSONjqkmcbuCb1koZdGAV7BgOUWnLz80VMyHZMw3onrVwFCCMHBBdruBPuQTvkg==",
      "path": "microsoft.extensions.configuration/9.0.3",
      "hashPath": "microsoft.extensions.configuration.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.Abstractions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-q5qlbm6GRUrle2ZZxy9aqS/wWoc+mRD3JeP6rcpiJTh5XcemYkplAcJKq8lU11ZfPom5lfbZZfnQvDqcUhqD5Q==",
      "path": "microsoft.extensions.configuration.abstractions/9.0.3",
      "hashPath": "microsoft.extensions.configuration.abstractions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.Binder/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ad82pYBUSQbd3WIboxsS1HzFdRuHKRa2CpYwie/o6dZAxUjt62yFwjoVdM7Iw2VO5fHV1rJwa7jJZBNZin0E7Q==",
      "path": "microsoft.extensions.configuration.binder/9.0.3",
      "hashPath": "microsoft.extensions.configuration.binder.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.CommandLine/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-rVwz4ml/Jve/QzzUlyTVOKXVZ37op9RK6Ize4uPmJ3S5c2ErExoy816+dslBQ06ZrFq8M9bpnV5LVBuPD1ONHQ==",
      "path": "microsoft.extensions.configuration.commandline/9.0.3",
      "hashPath": "microsoft.extensions.configuration.commandline.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.EnvironmentVariables/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-fo84UIa8aSBG3pOtzLsgkj1YkOVfYFy2YWcRTCevHHAkuVsxnYnKBrcW2pyFgqqfQ/rT8K1nmRXHDdQIZ8PDig==",
      "path": "microsoft.extensions.configuration.environmentvariables/9.0.3",
      "hashPath": "microsoft.extensions.configuration.environmentvariables.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.FileExtensions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-tBNMSDJ2q7WQK2zwPhHY5I/q95t7sf6dT079mGrNm0yOZF/gM9JvR/LtCb/rwhRmh7A6XMnzv5WbpCh9KLq9EQ==",
      "path": "microsoft.extensions.configuration.fileextensions/9.0.3",
      "hashPath": "microsoft.extensions.configuration.fileextensions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.Json/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-mjkp3ZwynNacZk4uq93I0DyCY48FZmi3yRV0xlfeDuWh44KcDunPXHwt8IWr4kL7cVM6eiFVe6YTJg97KzUAUA==",
      "path": "microsoft.extensions.configuration.json/9.0.3",
      "hashPath": "microsoft.extensions.configuration.json.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Configuration.UserSecrets/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-vwkBQ5jqmfX7nD7CFvB3k1uSeNBKRcYRDvlk3pxJzJfm/cgT4R+hQg5AFXW/1aLKjz0q7brpRocHC5GK2sjvEw==",
      "path": "microsoft.extensions.configuration.usersecrets/9.0.3",
      "hashPath": "microsoft.extensions.configuration.usersecrets.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.DependencyInjection/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-lDbxJpkl6X8KZGpkAxgrrthQ42YeiR0xjPp7KPx+sCPc3ZbpaIbjzd0QQ+9kDdK2RU2DOl3pc6tQyAgEZY3V0A==",
      "path": "microsoft.extensions.dependencyinjection/9.0.3",
      "hashPath": "microsoft.extensions.dependencyinjection.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.DependencyInjection.Abstractions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-TfaHPSe39NyL2wxkisRxXK7xvHGZYBZ+dy3r+mqGvnxKgAPdHkMu3QMQZI4pquP6W5FIQBqs8FJpWV8ffCgDqQ==",
      "path": "microsoft.extensions.dependencyinjection.abstractions/9.0.3",
      "hashPath": "microsoft.extensions.dependencyinjection.abstractions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Diagnostics/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-gqhbIq6adm0+/9IlDYmchekoxNkmUTm7rfTG3k4zzoQkjRuD8TQGwL1WnIcTDt4aQ+j+Vu0OQrjI8GlpJQQhIA==",
      "path": "microsoft.extensions.diagnostics/9.0.3",
      "hashPath": "microsoft.extensions.diagnostics.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Diagnostics.Abstractions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/fn0Xe8t+3YbMfwyTk4hFirWyAG1pBA5ogVYsrKAuuD2gbqOWhFuSA28auCmS3z8Y2eq3miDIKq4pFVRWA+J6g==",
      "path": "microsoft.extensions.diagnostics.abstractions/9.0.3",
      "hashPath": "microsoft.extensions.diagnostics.abstractions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.FileProviders.Abstractions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-umczZ3+QPpzlrW/lkvy+IB0p52+qZ5w++aqx2lTCMOaPKzwcbVdrJgiQ3ajw5QWBp7gChLUiCYkSlWUpfjv24g==",
      "path": "microsoft.extensions.fileproviders.abstractions/9.0.3",
      "hashPath": "microsoft.extensions.fileproviders.abstractions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.FileProviders.Physical/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-th2+tQBV5oWjgKhip9GjiIv2AEK3QvfAO3tZcqV3F3dEt5D6Gb411RntCj1+8GS9HaRRSxjSGx/fCrMqIjkb1Q==",
      "path": "microsoft.extensions.fileproviders.physical/9.0.3",
      "hashPath": "microsoft.extensions.fileproviders.physical.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.FileSystemGlobbing/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-Rec77KHk4iNpFznHi5/6wF3MlUDcKqg26t8gRYbUm1PSukZ4B6mrXpZsJSNOiwyhhQVkjYbaoZxi5XJgRQ5lFg==",
      "path": "microsoft.extensions.filesystemglobbing/9.0.3",
      "hashPath": "microsoft.extensions.filesystemglobbing.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Hosting/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-ioFXglqFA9uCYcKHI3CLVTO3I75jWIhvVxiZBzGeSPxw7XdhDLh0QvbNFrMTbZk9qqEVQcylblcvcNXnFHYXyA==",
      "path": "microsoft.extensions.hosting/9.0.3",
      "hashPath": "microsoft.extensions.hosting.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Hosting.Abstractions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-rHabYVhQsGYNfgnfnYLqZRx/hLe85i6jW5rnDjA9pjt3x7yjPv8T/EXcgN5T9T38FAVwZRA+RMGUkEHbxvCOBQ==",
      "path": "microsoft.extensions.hosting.abstractions/9.0.3",
      "hashPath": "microsoft.extensions.hosting.abstractions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Hosting.WindowsServices/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-b5e0IBwqpndhBLQmaOFv/2A9MyUpw4hAkb8JbXUxMhF9x0xJgMcr1OrnfoO2iOktuITaIXT5Prs6zwOOMPtaGQ==",
      "path": "microsoft.extensions.hosting.windowsservices/9.0.3",
      "hashPath": "microsoft.extensions.hosting.windowsservices.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-utIi2R1nm+PCWkvWBf1Ou6LWqg9iLfHU23r8yyU9VCvda4dEs7xbTZSwGa5KuwbpzpgCbHCIuKaFHB3zyFmnGw==",
      "path": "microsoft.extensions.logging/9.0.3",
      "hashPath": "microsoft.extensions.logging.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging.Abstractions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-H/MBMLt9A/69Ux4OrV7oCKt3DcMT04o5SCqDolulzQA66TLFEpYYb4qedMs/uwrLtyHXGuDGWKZse/oa8W9AZw==",
      "path": "microsoft.extensions.logging.abstractions/9.0.3",
      "hashPath": "microsoft.extensions.logging.abstractions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging.Configuration/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-eVZsaKNyK0g0C1qp0mmn4Q2PiX+bXdkz8+zVkXyVMk8IvoWfmTjLjEq1MQlwt1A22lToANPiUrxPJ7Tt3V5puw==",
      "path": "microsoft.extensions.logging.configuration/9.0.3",
      "hashPath": "microsoft.extensions.logging.configuration.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging.Console/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-o9VXLOdpTAro1q7ZThIB3S8OHrRn5pr8cFUCiN85fiwlfAt2DhU4ZIfHy+jCNbf7y7S5Exbr3dlDE8mKNrs0Yg==",
      "path": "microsoft.extensions.logging.console/9.0.3",
      "hashPath": "microsoft.extensions.logging.console.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging.Debug/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-BlKgvNYjD6mY5GXpMCf9zPAsrovMgW5mzCOT7SpoOSyI1478zldf+7PKvDIscC277z5zjSO3yi/OuIWpnTZmdA==",
      "path": "microsoft.extensions.logging.debug/9.0.3",
      "hashPath": "microsoft.extensions.logging.debug.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging.EventLog/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-/+elZUHGgB3oHKO9St/Ql/qfze9O+UbXj+9FOj1gIshLCFXcPlhpKoI11jE6eIV0kbs1P/EeffJl4KDFyvAiJQ==",
      "path": "microsoft.extensions.logging.eventlog/9.0.3",
      "hashPath": "microsoft.extensions.logging.eventlog.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Logging.EventSource/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-hgG0EGEHnngQFQNqJ5ungEykqaQ5Tik0Gpkb38pea2a5cR3pWlZR4vuYLDdtTgSiKEKByXz/3wNQ7qAqXamEEA==",
      "path": "microsoft.extensions.logging.eventsource/9.0.3",
      "hashPath": "microsoft.extensions.logging.eventsource.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Options/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-xE7MpY70lkw1oiid5y6FbL9dVw8oLfkx8RhSNGN8sSzBlCqGn0SyT3Fqc8tZnDaPIq7Z8R9RTKlS564DS+MV3g==",
      "path": "microsoft.extensions.options/9.0.3",
      "hashPath": "microsoft.extensions.options.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Options.ConfigurationExtensions/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-PcyYHQglKnWVZHSPaL6v2qnfsIuFw8tSq7cyXHg3OeuDVn/CqmdWUjRiZomCF/Gi+qCi+ksz0lFphg2cNvB8zQ==",
      "path": "microsoft.extensions.options.configurationextensions/9.0.3",
      "hashPath": "microsoft.extensions.options.configurationextensions.9.0.3.nupkg.sha512"
    },
    "Microsoft.Extensions.Primitives/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-yCCJHvBcRyqapMSNzP+kTc57Eaavq2cr5Tmuil6/XVnipQf5xmskxakSQ1enU6S4+fNg3sJ27WcInV64q24JsA==",
      "path": "microsoft.extensions.primitives/9.0.3",
      "hashPath": "microsoft.extensions.primitives.9.0.3.nupkg.sha512"
    },
    "runtime.linux-arm.runtime.native.System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-CBvgRaF+M0xGLDv2Geb/0v0LEADheH8aK72GRAUJdnqnJVsQO60ki1XO8M3keEhnjm+T5NvLm41pNXAVYAPiSg==",
      "path": "runtime.linux-arm.runtime.native.system.io.ports/7.0.0",
      "hashPath": "runtime.linux-arm.runtime.native.system.io.ports.7.0.0.nupkg.sha512"
    },
    "runtime.linux-arm64.runtime.native.System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-5VCyRCtCIYU8FR/W8oo7ouFuJ8tmAg9ddsuXhfCKZfZrbaVZSKxkmNBa6fxkfYPueD0jQfOvwFBmE5c6zalCSw==",
      "path": "runtime.linux-arm64.runtime.native.system.io.ports/7.0.0",
      "hashPath": "runtime.linux-arm64.runtime.native.system.io.ports.7.0.0.nupkg.sha512"
    },
    "runtime.linux-x64.runtime.native.System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-DV9dWDUs23OoZqMWl5IhLr3D+b9koDiSHQxFKdYgWnQbnthv8c/yDjrlrI8nMrDc71RAKCO8jlUojzuPMX04gg==",
      "path": "runtime.linux-x64.runtime.native.system.io.ports/7.0.0",
      "hashPath": "runtime.linux-x64.runtime.native.system.io.ports.7.0.0.nupkg.sha512"
    },
    "runtime.native.System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-L4Ivegqc3B0Fee7VifFy2JST9nndm+uvJ0viLIZUaImDfnr+JmRin9Tbqd56KuMtm0eVxHpNOWZBPtKrA/1h5Q==",
      "path": "runtime.native.system.io.ports/7.0.0",
      "hashPath": "runtime.native.system.io.ports.7.0.0.nupkg.sha512"
    },
    "runtime.osx-arm64.runtime.native.System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-jFwh4sKSXZ7al5XrItEO4GdGWa6XNxvNx+LhEHjrSzOwawO1znwJ+Dy+VjnrkySX9Qi4bnHNLoiqOXbqMuka4g==",
      "path": "runtime.osx-arm64.runtime.native.system.io.ports/7.0.0",
      "hashPath": "runtime.osx-arm64.runtime.native.system.io.ports.7.0.0.nupkg.sha512"
    },
    "runtime.osx-x64.runtime.native.System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-X4LrHEfke/z9+z+iuVr35NlkhdZldY8JGNMYUN+sfPK/U/6TcE+vP44I0Yv0ir1v0bqIzq3v6Qdv1c1vmp8s4g==",
      "path": "runtime.osx-x64.runtime.native.system.io.ports/7.0.0",
      "hashPath": "runtime.osx-x64.runtime.native.system.io.ports.7.0.0.nupkg.sha512"
    },
    "System.Diagnostics.EventLog/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-0nDJBZ06DVdTG2vvCZ4XjazLVaFawdT0pnji23ISX8I8fEOlRJyzH2I0kWiAbCtFwry2Zir4qE4l/GStLATfFw==",
      "path": "system.diagnostics.eventlog/9.0.3",
      "hashPath": "system.diagnostics.eventlog.9.0.3.nupkg.sha512"
    },
    "System.IO.Ports/7.0.0": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-0nWQjM5IofaIGpvkifN+LLuYwBG6BHlpmphLhhOJepcW12G8qToGuNDRgBzeTVBZzp33wVsESSZ8hUOCfq+8QA==",
      "path": "system.io.ports/7.0.0",
      "hashPath": "system.io.ports.7.0.0.nupkg.sha512"
    },
    "System.ServiceProcess.ServiceController/9.0.3": {
      "type": "package",
      "serviceable": true,
      "sha512": "sha512-moNbNXB7q4flS7bLjBTueu5MBZuxBHb08QTdVeDxJo55TgICdlaq4dvdmusB1D6VoUmq7/dT4uZDZ8KMZScHKg==",
      "path": "system.serviceprocess.servicecontroller/9.0.3",
      "hashPath": "system.serviceprocess.servicecontroller.9.0.3.nupkg.sha512"
    },
    "BENCHLAB_Core/1.0.0": {
      "type": "project",
      "serviceable": false,
      "sha512": ""
    }
  }
}

================================================
FILE: benchlab-service/PMD_Service.runtimeconfig.json
================================================
{
  "runtimeOptions": {
    "tfm": "net9.0",
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "9.0.0"
    },
    "configProperties": {
      "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
      "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false,
      "CSWINRT_USE_WINDOWS_UI_XAML_PROJECTIONS": false
    }
  }
}

================================================
FILE: benchlab-service/appsettings.Development.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}


================================================
FILE: benchlab-service/appsettings.json
================================================
{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  }
}


================================================
FILE: capframex-linux/.gitignore
================================================
# Build outputs
build/
bin/
obj/

# .NET
*.user
*.suo
.vs/
*.DotSettings.user

# IDE
.idea/
*.swp
*~

# CMake
CMakeFiles/
CMakeCache.txt
cmake_install.cmake
Makefile
*.cmake
!CMakeLists.txt

# Compiled objects
*.o
*.so
*.a

# NuGet
packages/
*.nupkg

# Logs
*.log

# OS
.DS_Store
Thumbs.db


================================================
FILE: capframex-linux/.vscode/launch.json
================================================
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "CapFrameX (Debug)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "${workspaceFolder}/src/app/CapFrameX.App/bin/Debug/net8.0/CapFrameX.App.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src/app/CapFrameX.App",
            "console": "internalConsole",
            "stopAtEntry": false,
            "env": {
                "DOTNET_ENVIRONMENT": "Development"
            }
        },
        {
            "name": "CapFrameX (Release)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build-release",
            "program": "${workspaceFolder}/src/app/CapFrameX.App/bin/Release/net8.0/CapFrameX.App.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src/app/CapFrameX.App",
            "console": "internalConsole",
            "stopAtEntry": false
        },
        {
            "name": "Attach to Process",
            "type": "coreclr",
            "request": "attach",
            "processId": "${command:pickProcess}"
        },
        {
            "name": "FrameReceptionTest (Debug)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build-test",
            "program": "${workspaceFolder}/src/app/FrameReceptionTest/bin/Debug/net8.0/FrameReceptionTest.dll",
            "args": [],
            "cwd": "${workspaceFolder}/src/app/FrameReceptionTest",
            "console": "internalConsole",
            "stopAtEntry": false
        }
    ]
}


================================================
FILE: capframex-linux/.vscode/settings.json
================================================
{
    "dotnet.defaultSolution": "src/app/CapFrameX.sln",
    "omnisharp.enableRoslynAnalyzers": true,
    "omnisharp.enableEditorConfigSupport": true,
    "omnisharp.useModernNet": true,
    "csharp.debug.debuggerPath": "/usr/bin/netcoredbg",
    "editor.formatOnSave": true,
    "files.exclude": {
        "**/bin": true,
        "**/obj": true
    },
    "search.exclude": {
        "**/bin": true,
        "**/obj": true
    }
}


================================================
FILE: capframex-linux/.vscode/tasks.json
================================================
{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "build",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/src/app/CapFrameX.App/CapFrameX.App.csproj",
                "-c",
                "Debug"
            ],
            "problemMatcher": "$msCompile",
            "group": {
                "kind": "build",
                "isDefault": true
            }
        },
        {
            "label": "build-release",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/src/app/CapFrameX.App/CapFrameX.App.csproj",
                "-c",
                "Release"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "build-test",
            "command": "dotnet",
            "type": "process",
            "args": [
                "build",
                "${workspaceFolder}/src/app/FrameReceptionTest/FrameReceptionTest.csproj",
                "-c",
                "Debug"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "clean",
            "command": "dotnet",
            "type": "process",
            "args": [
                "clean",
                "${workspaceFolder}/src/app/CapFrameX.sln"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "restore",
            "command": "dotnet",
            "type": "process",
            "args": [
                "restore",
                "${workspaceFolder}/src/app/CapFrameX.sln"
            ],
            "problemMatcher": "$msCompile"
        },
        {
            "label": "rebuild",
            "dependsOn": ["clean", "build"],
            "dependsOrder": "sequence",
            "problemMatcher": "$msCompile",
            "group": "build"
        },
        {
            "label": "watch",
            "command": "dotnet",
            "type": "process",
            "args": [
                "watch",
                "run",
                "--project",
                "${workspaceFolder}/src/app/CapFrameX.App/CapFrameX.App.csproj"
            ],
            "problemMatcher": "$msCompile",
            "isBackground": true
        }
    ]
}


================================================
FILE: capframex-linux/CLAUDE.md
================================================
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

CapFrameX Linux is a frametime capture and analysis tool for Linux. It captures real-time GPU frametime metrics from Vulkan applications and provides statistical analysis through a modern GUI.

## Architecture

```
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│     Daemon      │◄───►│  Vulkan Layer   │◄───►│   GUI App       │
│       (C)       │     │      (C)        │     │ (.NET/Avalonia) │
└─────────────────┘     └─────────────────┘     └─────────────────┘
        │                       │                       │
        └───────────────────────┴───────────────────────┘
                              IPC
                  (Unix Socket at ~/.config/capframex/)
```

**Three-tier design:**
- **Daemon** (`src/daemon/`): Game detection, process monitoring, IPC server, message routing
- **Vulkan Layer** (`src/layer/`): In-game frametime capture via VK_LAYER_capframex_capture
- **GUI Application** (`src/app/`): Avalonia UI with MVVM pattern, statistics, charting

**IPC Protocol:** Binary messages over Unix socket with MessageType enum defining 19+ message types (MSG_GAME_STARTED, MSG_FRAMETIME_DATA, MSG_START_CAPTURE, etc.) defined in `src/app/CapFrameX.Shared/IPC/Messages.cs` and `src/daemon/common.h`.

## Build Commands

### Prerequisites

```bash
# Debian/Ubuntu
sudo apt install build-essential cmake libvulkan-dev

# .NET 8 SDK required - see https://dotnet.microsoft.com
```

### Build All Components

```bash
./scripts/build.sh
```

### Build Individual Components

```bash
# Native only (daemon + layer)
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j$(nproc)

# .NET only
cd src/app
dotnet restore
dotnet build -c Release

# Publish self-contained
./scripts/build.sh --publish
```

### Build Output Locations

- Daemon: `build/bin/capframex-daemon`
- Layer: `build/lib/libcapframex_layer.so`
- App: `src/app/CapFrameX.App/bin/Release/net8.0/`

## Running and Testing

### Run Without Installing

```bash
# Terminal 1: Start daemon
./build/bin/capframex-daemon -d    # -d for debug output

# Terminal 2: Run the app
dotnet run --project src/app/CapFrameX.App

# Terminal 3: Test with Vulkan app
export VK_LAYER_PATH=$PWD/build/lib
export VK_INSTANCE_LAYERS=VK_LAYER_capframex_capture
vkcube
```

### Run Integration Test

```bash
# Daemon must be running first
dotnet run --project src/app/FrameReceptionTest
```

The FrameReceptionTest connects to the daemon, auto-subscribes to detected games, and prints frame statistics.

## Key Files

**Daemon:**
- `src/daemon/main.c` - Entry point, game tracking loop
- `src/daemon/ipc.c` - Unix socket server, message routing
- `src/daemon/launcher_detect.c` - Steam, Lutris, Heroic, Bottles detection
- `src/daemon/common.h` - Shared structs and message definitions

**Layer:**
- `src/layer/layer.c` - Vulkan layer entry points
- `src/layer/swapchain.c` - vkCreateSwapchainKHR hooking
- `src/layer/timing.c` - vkQueuePresentKHR hooking, frametime measurement
- `src/layer/ipc_client.c` - Client connection to daemon

**App:**
- `src/app/CapFrameX.Shared/IPC/Messages.cs` - IPC protocol definitions (must match common.h)
- `src/app/CapFrameX.Core/Capture/DaemonClient.cs` - IPC client wrapper
- `src/app/CapFrameX.App/ViewModels/` - MVVM view models

## Configuration

- User settings: `~/.config/capframex/AppSettings.json`
- Sessions: `~/.local/share/capframex/sessions/`
- IPC socket: `~/.config/capframex/capframex.sock`

## Custom Agents

Two custom agents are defined in `.claude/agents/`:

- **code-reviewer**: Reviews code for correctness, style, security, and best practices. Uses Sonnet model.
- **web-researcher**: Conducts web research and summarizes findings with sources. Uses Sonnet model.

## Key Dependencies

**Native:** Vulkan SDK, POSIX threads, CMake 3.16+

**C#/.NET:**
- Avalonia 11.0.6 (UI framework)
- CommunityToolkit.Mvvm 8.2.2 (MVVM)
- LiveChartsCore 2.0.0-rc2 (Charting)
- System.Reactive 6.0.0 (Observables)


================================================
FILE: capframex-linux/CMakeLists.txt
================================================
cmake_minimum_required(VERSION 3.16)
project(capframex-linux VERSION 1.0.0 LANGUAGES C CXX)

set(CMAKE_C_STANDARD 11)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_POSITION_INDEPENDENT_CODE ON)

# Build options
option(BUILD_DAEMON "Build the game detection daemon" ON)
option(BUILD_LAYER "Build the Vulkan capture layer" ON)
option(BUILD_TESTS "Build tests" OFF)

# Find required packages
find_package(Vulkan REQUIRED)
find_package(Threads REQUIRED)

# Output directories
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

# Add subdirectories
if(BUILD_DAEMON)
    add_subdirectory(src/daemon)
endif()

if(BUILD_LAYER)
    add_subdirectory(src/layer)
endif()

if(BUILD_TESTS)
    enable_testing()
    add_subdirectory(tests)
endif()

# Installation
include(GNUInstallDirs)

# Install systemd service
install(FILES scripts/capframex-daemon.service
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/systemd/user
    COMPONENT daemon)

# Install Vulkan layer manifest
install(FILES src/layer/capframex_layer.json
    DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/vulkan/implicit_layer.d
    COMPONENT layer)


================================================
FILE: capframex-linux/CX Logo/CapFrameX.ai
================================================
%PDF-1.5
%
1 0 obj
<</Metadata 2 0 R/OCProperties<</D<</ON[25 0 R]/Order 26 0 R/RBGroups[]>>/OCGs[25 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<</Length 41214/Subtype/XML/Type/Metadata>>stream
<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.6-c148 79.164050, 2019/10/01-18:03:16        ">
   <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
      <rdf:Description rdf:about=""
            xmlns:dc="http://purl.org/dc/elements/1.1/"
            xmlns:xmp="http://ns.adobe.com/xap/1.0/"
            xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/"
            xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
            xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
            xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#"
            xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/"
            xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
            xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
            xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/"
            xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
         <dc:format>application/pdf</dc:format>
         <dc:title>
            <rdf:Alt>
               <rdf:li xml:lang="x-default">CapFrameX</rdf:li>
            </rdf:Alt>
         </dc:title>
         <xmp:CreatorTool>Adobe Illustrator 24.1 (Windows)</xmp:CreatorTool>
         <xmp:CreateDate>2021-11-17T18:56:36+06:00</xmp:CreateDate>
         <xmp:ModifyDate>2021-11-17T18:56:36+05:00</xmp:ModifyDate>
         <xmp:MetadataDate>2021-11-17T18:56:36+05:00</xmp:MetadataDate>
         <xmp:Thumbnails>
            <rdf:Alt>
               <rdf:li rdf:parseType="Resource">
                  <xmpGImg:width>256</xmpGImg:width>
                  <xmpGImg:height>152</xmpGImg:height>
                  <xmpGImg:format>JPEG</xmpGImg:format>
                  <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAmAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8ABZ6O+cuxV2KuxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVOfLnlDXvMUzJplsZI4zSW4c8Ik+bHv7DfMXU6zHhHr&#xA;Pw6uTptHkzH0D49GYL+RfmTiOV/Zhu4BlI+/gM1h7exfzZfZ+t2Y7By/zo/b+ps/kX5gAJOoWYA3&#xA;JJk/5ox/l7F/Nl9i/wAg5P50ftYRFobz39za2lxHcQ2zFDdpy9JiNvhJFT7bZV2x7SYOz8UZ5QeK&#xA;fKIri9/N0eesciLv3KOp6Vc6eyerRkk+y61pXwNe+HsL2l03aQl4dxnHnGVXXeKJ2/HcwhMS5ILO&#xA;hZtgEkACpOwAxVlupflnrml6Cda1K5s7OAIH9CV5PW5N9mPiIyOZ8K/PNZj7VxzycERInv2r7+Ts&#xA;snZWSGPjkYgd29/dzYiDUVzZutdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV&#xA;dirsVdir2rzjq8/kTyHpljoarFd3XGL6zQEqxTnLLQ9XY9K/wzktNj/NaiUp8h+AHrNTk/K6eMYc&#xA;z+CXlL+bvOEjF312/wCR68bmVB9ysBnQjQYR/BH5B546/Mf45fNTm8yeaJonhm1q/likUrJG91My&#xA;spFCGBehByQ0WEGxGPyDE63KRRlL5lBRT3UMfpwTyQp14o7KK/Qcq1PZelzy4suLHOXfKMSftDjE&#xA;A8wyLSb2HVLNtOvjylC/C56sB0YH+Zc8t9o+x8vZGqjrdJtjvl0if5p/oS/Z3ONkjwniCRX1jNZX&#xA;LW8u5G6P2ZexGeldi9sYu0NOMuP/ADh1ie79XeG+MhIWHpn5X+SLe2t/8W69xhtYFM1kktAoVRX6&#xA;w9ewp8H3+GYvauvJPg4+Z5/q/W9H2VoAB42TkOX6/wBTD/P/AJ3ufNmrckLR6PasRY2525djK4/m&#xA;b8Bt41zeztAMMd/qPNwe0dec0tvpHJjebR1jsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir&#xA;sVdirsVdirsVdirsVetfniinRPL7/tLIyj5GJT/DOX7FP72b0/bQ/dQeS51DzDsVdiq6OR45FkjY&#xA;q6GqsOxGU6jTwzYzjmOKEhRCCHonkXyrd+cNRi1LVIhHoen7FP8Alom6soP8n833eNOJ0fZWLseM&#xA;44pGWTIef82P8I9/n1dr2R2YMh4pfQPt8v1ob81fP41q5OgaQ4Gi2jBbiWPZZ5E7LT/daEbeJ36U&#xA;zfdldn8P7yf1H7P2uT2r2hxfu4fSPt/YwIAAUGb10TsKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV6z+eSv+iPLzA/AGkDD3MaU/Uc5jsQ/vJvTdtf3cHk2dO8y7FXY&#xA;qyPyP5Ou/M+rLbpWOyho97cgfYT+UV/aboPv7Zg67WxwQv8AiPIObodFLPOv4RzLNPzP86W2jWCe&#xA;TPLdISkYjvZYjT0oyP7pSP23rVz/ABJppuztHLNPxsm/d+v9Tue0dZHDDwce3f8Aq/Wwn9E2N9o0&#xA;TacoWeAUoacmP7Sv7+GcdH2g1nZvak4aw3iyH4Afwyh5dJD7yHkfEIl6mPEEEgihBoQeoIz1WExK&#xA;IlE2C5DsmrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVey6Hqnlzz&#xA;/wCVYPL+rzfV9XtQgjNQrl4xxWWKuzclNGX5+xzldRhyaTMckBcD+KL1OnzY9XhGOZqY/FhAt+Qt&#xA;yGPHWUK9ibcg/wDJw5kD2gH8z7f2OOewD/P+z9q3/lQ13/1eI/8AkQ3/ADXj/L4/mfb+xf5AP8/7&#xA;P2u/5UNd/wDV4j/5EN/zXj/L4/mfb+xf5AP8/wCz9qZ+add0z8ufLMWhaIVfWrpSRIQCyk7PcSDx&#xA;7IP4DMTBinrMvHP6B+K/W5efLDR4uCH1H8X+p4sObM0krGSWQl5JGNWZmNSST1JOdVCIiKDys5GR&#xA;so3StSlsLkSLVom2lj8R/UZofaPsDH2lg4DtkjvCXce73Hr8+jVOHEE213TI7mEapZfGGHKVV/aX&#xA;+Ye475xHsj2/k0eY6DV+mjUb/hP833H+E/oO1WKdeksdz1hyHYq7FXYq7FXYq7FXYq7FXYq7FXYq&#xA;7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4gHAquNQ1JQFW8nVRsAJXAH45UdPDuDaNRPvLv0jqn/Ldc&#xA;f8jZP64Py+PuHyT+Yyd5+bv0jqn/AC3XH/I2T+uP5fH3D5L+Yyd5+ajI0kshlmdpZDsXdizbe5rl&#xA;kYCPINcpmXMtZNi7FW+UgFFdlHgCQPwzGyaTFOXFKMSe8gK0BQUzIV2FXYq7FXYq7FXYq7FXYq7F&#xA;XYq7FXYq7FXYq7FXYq7FXYq7FUy8t2VrfeYdNs7o0tri5iim3pVXcAivavTKNTMwxSkOYBb9NATy&#xA;xieRIROu+Y9VuLi9sGgtrS0WRolso7WBDCEfor8PUDfDueVTlGn00QBKyT32d/tpv1GpkSY0AO6h&#xA;t9lqnkywhl1J766VHstLj+szLMVWJ5KhII3ZvhAeVlBr2rh12Qxhwj6pbfrPwDHQ4xKfEfpjv+of&#xA;NU886bHbalBf24hFpqsKzqLV0kgSdfhuIkeMlCFk326AjIdn5jKJibuJrfnXQ/Js7QwiMhIVUhe3&#xA;K+o+acaVcW1no/luaa4s7O0Y3cuoNc2yXDTpHOq+moMcjM3FiBuPnmLnEpZMgAkT6ao1W3vcnAYx&#xA;x4yTED1XYu9/cxSCS0ufMBkt4fSspbpmggbfjEzkoh+S7ZDtuc4dnZTfrGI7jvrm6jUkEyMdhvSH&#xA;vZVc0W5Wajn4Fi9OnXvxFcq7FxTiblinjuPM5OO/hxGmER5JhYqxisVQxqWadnVo1dpBHwPBajrQ&#xA;mm4znu3M1Z9QZcZEY4RGpygIcfH6zR5WBex9zXLr8EqZhPcyGGPgskh9KLwBOwztNJxYNNHxpcRh&#xA;AcUu+hvJsqgmd/bQmydIfT52JFSjKXdfsyllB5fC/SvbOP7K7Tyx1kZ5fE4NVe0hLggfqxCMiOG5&#xA;Y9pAH6ubXA779VDSGt1e4e4UPCIfiqK0DOilh7gHNv7U+OceIYJGOQ5tq6kY8khE+RIFpmDtStFa&#xA;CztLtJ1DXDpKIiQDRIh9sf6xIpmp1Xa89Zm08sMjHFCWMz85ZD9B/qgG/eFJsiuSX2ThWLNMsNV+&#xA;2yeoOo2pQ51famMzxACEsnq5RnwdDvdj5M5Bq5kDyikwnAX7Sx+mBudqUGDsrEYYzcJYzfKU+P43&#xA;Z+Sgbcme6JYWl7oEOvXOnLJqumxSrY2ahETUVgAIkaPYv9X5fHxHx9Otcx9RllDIcYl6JVZ/mX0v&#xA;+l07neafFGeMZDH1xuh/OrrX9Hr3vP3mlnkeeUgySsXbiAoqxqaBaAD2GbqEaFOmnKzbWSYuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVtWZWDKSGBqCNiCMBCgsuvl856jbSW819b3fNbdZqJEZ&#xA;29dkWNXmEYkJBZeXJ81UPAhKwCOffW3ldO1n4840SDy7r386tQh8q+aP0ddWKSxRafJMhuuTBQzx&#xA;yiGKrcefEmXmo6EVPUZZPV4TISN8VbfKz91NcNLmETHYRvf50PvtC2+kaxfWtrpEF5bzW3qTXFvH&#xA;XZWDiB2EhQfCxA2DU75OWbHGRmQQdh+nlbCOHJKIgCCNz+jmuutD1yVLLS7q5gX6s7xWto7ASI8s&#xA;SXMgIC8ifjCkGvxfCMEc+MEzAO/M+48P48t0ywZCBAkbch7xxfjz2Q+n+X9Uk+p3FuyRtcTyQ25Y&#xA;Ns0ADSO3wkBUG5B39sdZLDlxzxZBxQMfUO8S6c738vm0R0kpAf0iR8uaw+W7qNSZ7iCKYLJJLA7N&#xA;6icHCHmqqaVZtu3XwyyGogABEGtgyOll1ICKHlbXPRR3ligS0l4qHYoyM7hef2a8dg1fDfMKcdKZ&#xA;zkY8RyxAl1EgAaFXXUpGhnRO3cpaboesXs817bSRN6VyITdVAjLs3H1F+HjxBZamn7Qw5MGmjp/y&#xA;0gfCMK4blfD3XfF9vSmENHKY25A1+Px1U5vL2radbXF27KjxFYriPdnpcLtWqlDWvjX9eWZYafUC&#xA;OOQuIIlHpRidqogiv2JyaSQjZ6UrSeUdftRcQhULgLFJGjBmYMUPwgjpzZVJ7NthyZMGXgMv4JcU&#xA;fI1IfcTsem7KWhyA8uX4/TXvdcaBra3jwTXMIkSCWMMzgKYIVVnKkjcem/PxIr32zFxaPRxj6YUD&#xA;kGTa/rJ58+8VX0/BB0Uga26n5fs3W23l/U4p1SKSDlJFzVmBkUqRyooKNzbanwA77eOZGsGHPDhn&#xA;xUD0lKBvlzjKJrfqfPuQdHImv1rtM8uarrrQvBNAWkViFCsnELLHFRhHHTd5l3++gyOGOHRxMY8d&#xA;X1lKXTvnInkOScGilP6evv7wP0ozUbLzZaLYa5PdqrWNvG9kY6IYY19EoqqEVDtdITxqDU1Nctxz&#xA;wSMoAfUTfnz/AOJLkZIZ4iMyfpAry5f8UGNTTSzzSTykGSVi78VVFqxqaKoVR8gM2EIiIoOvnIyN&#xA;lZkmLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq8TTgkrK4LCjEMRUdKZAwB6MhMjq5J7l&#xA;CCk0i04gUdhTjuvQ9u2A44nokZJDq4zTlixlcs1eTFjU8jVqmvc9cPAO5HGe9ct3eLXjcSirFzR2&#xA;3YjiT168dsHhR7gy8WXeViyzJCYVkdYWNWjDEKTSlSOnTCYC7piJmqtovIWZmdizijMSSSCa74RA&#xA;BTMlck9whqk0inbdWYdKU6HtxH3YDjieiRkkOrvWnqW9V+RJYtyNSzULEmvU0FceCPcjjPe4z3BR&#xA;UMzlFYMqljQMBQECvUDbHw49y+JLva9WYUpK44140Y7VPI0+nfHgHcvGe9v6xc+kIvWk9IdI+TcR&#xA;8PHpWn2TT5Y+HG7pPiSqrcZ7glj60lXXg55HdaUod9xTHw49y+JLvdHNPFT0pXjIBAKsRQN16eOJ&#xA;gDzCBMjkW1urtVCrPIFCGMAOwARuq9eh8MHhx7k+JLvU8sYOxV2KuxV2KuxV2KuxV2KuxV2KuxV2&#xA;KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku&#xA;xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV&#xA;2KuxV2Ks5/5U152/31b/API4f0zU/wAtafvPydt/IufuHzd/yprzt/vq3/5HD+mP8tafvPyX+Rc/&#xA;cPm7/lTXnb/fVv8A8jh/TH+WtP3n5L/IufuHzd/yprzt/vq3/wCRw/pj/LWn7z8l/kXP3D5u/wCV&#xA;Nedv99W//I4f0x/lrT95+S/yLn7h83f8qa87f76t/wDkcP6Y/wAtafvPyX+Rc/cPm7/lTXnb/fVv&#xA;/wAjh/TH+WtP3n5L/IufuHzd/wAqa87f76t/+Rw/pj/LWn7z8l/kXP3D5u/5U152/wB9W/8AyOH9&#xA;Mf5a0/efkv8AIufuHzd/yprzt/vq3/5HD+mP8tafvPyX+Rc/cPm7/lTXnb/fVv8A8jh/TH+WtP3n&#xA;5L/IufuHzd/yprzt/vq3/wCRw/pj/LWn7z8l/kXP3D5u/wCVNedv99W//I4f0x/lrT95+S/yLn7h&#xA;83f8qa87f76t/wDkcP6Y/wAtafvPyX+Rc/cPm7/lTXnb/fVv/wAjh/TH+WtP3n5L/IufuHzd/wAq&#xA;a87f76t/+Rw/pj/LWn7z8l/kXP3D5u/5U152/wB9W/8AyOH9Mf5a0/efkv8AIufuHzd/yprzt/vq&#xA;3/5HD+mP8tafvPyX+Rc/cPm7/lTXnb/fVv8A8jh/TH+WtP3n5L/IufuHzd/yprzt/vq3/wCRw/pj&#xA;/LWn7z8l/kXP3D5u/wCVNedv99W//I4f0x/lrT95+S/yLn7h83f8qa87f76t/wDkcP6Y/wAtafvP&#xA;yX+Rc/cPm7/lTXnb/fVv/wAjh/TH+WtP3n5L/IufuHzd/wAqa87f76t/+Rw/pj/LWn7z8l/kXP3D&#xA;5u/5U152/wB9W/8AyOH9Mf5a0/efkv8AIufuHzd/yprzt/vq3/5HD+mP8tafvPyX+Rc/cPm7/lTX&#xA;nb/fVv8A8jh/TH+WtP3n5L/IufuHzd/yprzt/vq3/wCRw/pj/LWn7z8l/kXP3D5u/wCVNedv99W/&#xA;/I4f0x/lrT95+S/yLn7h83f8qa87f76t/wDkcP6Y/wAtafvPyX+Rc/cPm7/lTXnb/fVv/wAjh/TH&#xA;+WtP3n5L/IufuHzd/wAqa87f76t/+Rw/pj/LWn7z8l/kXP3D5v8A/9k=</xmpGImg:image>
               </rdf:li>
            </rdf:Alt>
         </xmp:Thumbnails>
         <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
         <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
         <xmpMM:DocumentID>xmp.did:e0611c09-f811-9c44-b33c-9907b591f451</xmpMM:DocumentID>
         <xmpMM:InstanceID>uuid:ff813081-cb6a-44bb-9d37-85d06734a9fa</xmpMM:InstanceID>
         <xmpMM:DerivedFrom rdf:parseType="Resource">
            <stRef:instanceID>uuid:66fd2c39-3f04-491b-bd8a-a9093e4371b4</stRef:instanceID>
            <stRef:documentID>xmp.did:1b2298ef-59a9-1d4c-bf4b-53ec4ba6c2f5</stRef:documentID>
            <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
            <stRef:renditionClass>proof:pdf</stRef:renditionClass>
         </xmpMM:DerivedFrom>
         <xmpMM:History>
            <rdf:Seq>
               <rdf:li rdf:parseType="Resource">
                  <stEvt:action>saved</stEvt:action>
                  <stEvt:instanceID>xmp.iid:1b2298ef-59a9-1d4c-bf4b-53ec4ba6c2f5</stEvt:instanceID>
                  <stEvt:when>2021-11-17T16:03:04+05:00</stEvt:when>
                  <stEvt:softwareAgent>Adobe Illustrator 24.1 (Windows)</stEvt:softwareAgent>
                  <stEvt:changed>/</stEvt:changed>
               </rdf:li>
               <rdf:li rdf:parseType="Resource">
                  <stEvt:action>saved</stEvt:action>
                  <stEvt:instanceID>xmp.iid:e0611c09-f811-9c44-b33c-9907b591f451</stEvt:instanceID>
                  <stEvt:when>2021-11-17T18:49:16+05:00</stEvt:when>
                  <stEvt:softwareAgent>Adobe Illustrator 24.1 (Windows)</stEvt:softwareAgent>
                  <stEvt:changed>/</stEvt:changed>
               </rdf:li>
            </rdf:Seq>
         </xmpMM:History>
         <illustrator:StartupProfile>Web</illustrator:StartupProfile>
         <illustrator:Type>Document</illustrator:Type>
         <illustrator:CreatorSubTool>AIRobin</illustrator:CreatorSubTool>
         <xmpTPg:NPages>1</xmpTPg:NPages>
         <xmpTPg:HasVisibleTransparency>True</xmpTPg:HasVisibleTransparency>
         <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
         <xmpTPg:MaxPageSize rdf:parseType="Resource">
            <stDim:w>960.000000</stDim:w>
            <stDim:h>560.000000</stDim:h>
            <stDim:unit>Pixels</stDim:unit>
         </xmpTPg:MaxPageSize>
         <xmpTPg:PlateNames>
            <rdf:Seq>
               <rdf:li>Cyan</rdf:li>
               <rdf:li>Magenta</rdf:li>
               <rdf:li>Yellow</rdf:li>
               <rdf:li>Black</rdf:li>
            </rdf:Seq>
         </xmpTPg:PlateNames>
         <xmpTPg:SwatchGroups>
            <rdf:Seq>
               <rdf:li rdf:parseType="Resource">
                  <xmpG:groupName>Default Swatch Group</xmpG:groupName>
                  <xmpG:groupType>0</xmpG:groupType>
                  <xmpG:Colorants>
                     <rdf:Seq>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>White</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>255</xmpG:green>
                           <xmpG:blue>255</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>Black</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>0</xmpG:green>
                           <xmpG:blue>0</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>RGB Red</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>0</xmpG:green>
                           <xmpG:blue>0</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>RGB Yellow</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>255</xmpG:green>
                           <xmpG:blue>0</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>RGB Green</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>255</xmpG:green>
                           <xmpG:blue>0</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>255</xmpG:green>
                           <xmpG:blue>255</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>RGB Blue</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>0</xmpG:green>
                           <xmpG:blue>255</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>0</xmpG:green>
                           <xmpG:blue>255</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>193</xmpG:red>
                           <xmpG:green>39</xmpG:green>
                           <xmpG:blue>45</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>237</xmpG:red>
                           <xmpG:green>28</xmpG:green>
                           <xmpG:blue>36</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>241</xmpG:red>
                           <xmpG:green>90</xmpG:green>
                           <xmpG:blue>36</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>247</xmpG:red>
                           <xmpG:green>147</xmpG:green>
                           <xmpG:blue>30</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>251</xmpG:red>
                           <xmpG:green>176</xmpG:green>
                           <xmpG:blue>59</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>252</xmpG:red>
                           <xmpG:green>238</xmpG:green>
                           <xmpG:blue>33</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>217</xmpG:red>
                           <xmpG:green>224</xmpG:green>
                           <xmpG:blue>33</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>140</xmpG:red>
                           <xmpG:green>198</xmpG:green>
                           <xmpG:blue>63</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>57</xmpG:red>
                           <xmpG:green>181</xmpG:green>
                           <xmpG:blue>74</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>146</xmpG:green>
                           <xmpG:blue>69</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>104</xmpG:green>
                           <xmpG:blue>55</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>34</xmpG:red>
                           <xmpG:green>181</xmpG:green>
                           <xmpG:blue>115</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>169</xmpG:green>
                           <xmpG:blue>157</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>41</xmpG:red>
                           <xmpG:green>171</xmpG:green>
                           <xmpG:blue>226</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>113</xmpG:green>
                           <xmpG:blue>188</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>46</xmpG:red>
                           <xmpG:green>49</xmpG:green>
                           <xmpG:blue>146</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>27</xmpG:red>
                           <xmpG:green>20</xmpG:green>
                           <xmpG:blue>100</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>102</xmpG:red>
                           <xmpG:green>45</xmpG:green>
                           <xmpG:blue>145</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>147</xmpG:red>
                           <xmpG:green>39</xmpG:green>
                           <xmpG:blue>143</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>158</xmpG:red>
                           <xmpG:green>0</xmpG:green>
                           <xmpG:blue>93</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>212</xmpG:red>
                           <xmpG:green>20</xmpG:green>
                           <xmpG:blue>90</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>237</xmpG:red>
                           <xmpG:green>30</xmpG:green>
                           <xmpG:blue>121</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>199</xmpG:red>
                           <xmpG:green>178</xmpG:green>
                           <xmpG:blue>153</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>153</xmpG:red>
                           <xmpG:green>134</xmpG:green>
                           <xmpG:blue>117</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>115</xmpG:red>
                           <xmpG:green>99</xmpG:green>
                           <xmpG:blue>87</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>83</xmpG:red>
                           <xmpG:green>71</xmpG:green>
                           <xmpG:blue>65</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>198</xmpG:red>
                           <xmpG:green>156</xmpG:green>
                           <xmpG:blue>109</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>166</xmpG:red>
                           <xmpG:green>124</xmpG:green>
                           <xmpG:blue>82</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>140</xmpG:red>
                           <xmpG:green>98</xmpG:green>
                           <xmpG:blue>57</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>117</xmpG:red>
                           <xmpG:green>76</xmpG:green>
                           <xmpG:blue>36</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>96</xmpG:red>
                           <xmpG:green>56</xmpG:green>
                           <xmpG:blue>19</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>66</xmpG:red>
                           <xmpG:green>33</xmpG:green>
                           <xmpG:blue>11</xmpG:blue>
                        </rdf:li>
                     </rdf:Seq>
                  </xmpG:Colorants>
               </rdf:li>
               <rdf:li rdf:parseType="Resource">
                  <xmpG:groupName>Grays</xmpG:groupName>
                  <xmpG:groupType>1</xmpG:groupType>
                  <xmpG:Colorants>
                     <rdf:Seq>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>0</xmpG:red>
                           <xmpG:green>0</xmpG:green>
                           <xmpG:blue>0</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>26</xmpG:red>
                           <xmpG:green>26</xmpG:green>
                           <xmpG:blue>26</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>51</xmpG:red>
                           <xmpG:green>51</xmpG:green>
                           <xmpG:blue>51</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>77</xmpG:red>
                           <xmpG:green>77</xmpG:green>
                           <xmpG:blue>77</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>102</xmpG:red>
                           <xmpG:green>102</xmpG:green>
                           <xmpG:blue>102</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>128</xmpG:red>
                           <xmpG:green>128</xmpG:green>
                           <xmpG:blue>128</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>153</xmpG:red>
                           <xmpG:green>153</xmpG:green>
                           <xmpG:blue>153</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>179</xmpG:red>
                           <xmpG:green>179</xmpG:green>
                           <xmpG:blue>179</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>204</xmpG:red>
                           <xmpG:green>204</xmpG:green>
                           <xmpG:blue>204</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>230</xmpG:red>
                           <xmpG:green>230</xmpG:green>
                           <xmpG:blue>230</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>242</xmpG:red>
                           <xmpG:green>242</xmpG:green>
                           <xmpG:blue>242</xmpG:blue>
                        </rdf:li>
                     </rdf:Seq>
                  </xmpG:Colorants>
               </rdf:li>
               <rdf:li rdf:parseType="Resource">
                  <xmpG:groupName>Web Color Group</xmpG:groupName>
                  <xmpG:groupType>1</xmpG:groupType>
                  <xmpG:Colorants>
                     <rdf:Seq>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>63</xmpG:red>
                           <xmpG:green>169</xmpG:green>
                           <xmpG:blue>245</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>122</xmpG:red>
                           <xmpG:green>201</xmpG:green>
                           <xmpG:blue>67</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>147</xmpG:green>
                           <xmpG:blue>30</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>29</xmpG:green>
                           <xmpG:blue>37</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>255</xmpG:red>
                           <xmpG:green>123</xmpG:green>
                           <xmpG:blue>172</xmpG:blue>
                        </rdf:li>
                        <rdf:li rdf:parseType="Resource">
                           <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
                           <xmpG:mode>RGB</xmpG:mode>
                           <xmpG:type>PROCESS</xmpG:type>
                           <xmpG:red>189</xmpG:red>
                           <xmpG:green>204</xmpG:green>
                           <xmpG:blue>212</xmpG:blue>
                        </rdf:li>
                     </rdf:Seq>
                  </xmpG:Colorants>
               </rdf:li>
            </rdf:Seq>
         </xmpTPg:SwatchGroups>
         <pdf:Producer>Adobe PDF library 15.00</pdf:Producer>
      </rdf:Description>
   </rdf:RDF>
</x:xmpmeta>
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                           
<?xpacket end="w"?>
endstream
endobj
3 0 obj
<</Count 1/Kids[5 0 R]/Type/Pages>>
endobj
5 0 obj
<</ArtBox[0.0 0.0 960.0 560.0]/BleedBox[0.0 0.0 960.0 560.0]/Contents 27 0 R/CropBox[0.0 0.0 960.0 560.0]/Group 28 0 R/LastModified(D:20211117185636+06'00')/MediaBox[0.0 0.0 960.0 560.0]/Parent 3 0 R/PieceInfo<</Illustrator 8 0 R>>/Resources<</ColorSpace<</CS0 29 0 R>>/ExtGState<</GS0 30 0 R/GS1 31 0 R>>/Properties<</MC0 25 0 R>>/XObject<</Fm0 32 0 R>>>>/Thumb 33 0 R/TrimBox[0.0 0.0 960.0 560.0]/Type/Page>>
endobj
27 0 obj
<</Filter/FlateDecode/Length 3105>>stream
HWَ}hk|%A`$@>`#9ťhd	6Asy\Uwz{ûԸmyxw|Vn	>4ɽwE6׶`ÃO6_h˲=~><Tݚ㶋ݙd۫QzZg|JƥE91.W]&38#n7M*r8	a{brTRD+p+ƕ4?{o 8!XL&F.c`a}Ʌ;"@_/5M?j[!E#1ϰm!mѡæs_)6cq1!zhR={Z
+"f0R"&wQmģɩTx)nBVXҘ0B-4W
p+A;!'1bv\ 	REz|&@#>uhn,LO;!
@pȢ=
msaܺ(&zs73@B/f셭cc^k.A;(
Tw.h2/ì]A*`'	'7YɓZ>P2%	DܧP`Iֻx<x˳>>>>^q=)DIN[^RYW¼> ޜHʂy~w*!2	؃|z`]-8cz1%'$JCPȚ1{J{6>1R3y
$&N&YeOrl=&8_||3(ZjU$c8N(Bxje-vHRnʙ|}ȟz<f0 3J$
f"'5؃܅E]yFnT8"#9aT8Z43,DrCC\kdZeRP8-ᥦ
'B!H{ Ro9݈-B#@J'@Z}X[

[YŗƄ5>1o:mi
f/)Vfe+k~/{_J0s<-Ĥq&&GwBFCtJx(#׳3bWQA'wU$W4@f07tFuEAnGq=O{MD4̆43*!#}o@K$Hȉq:dc~BH
yu&Ke9jMAL!p;jvig1_<(ubZ3g!jCh/=Yf$"H:a.h܆*r҆6KX|0,;[.SqyǍ53"hD7Ju^ՍϜ7MnL{҈77wح-aH8Ò"CECES=J]9m[C,PbVGFm|%_K%'wzQʏAcT~ʬ'j]&*#;@߉E^ҐrTsAK9n/!1eu W]ʺ>Q S*Ws`=:z( ;G /A(X>vP;,h][yAՆulb<Frܣhpg#IX;pH·ґ`o@!o)/Bd8a$/uEv3lO~Q_pe+E&R?DPwXjUq
j
MǶPWӀM
x7F8Hu~Iutj!LCV-Ҷ'3p( E"bQH&_cQ8ȝXK#ل^A<Ϩt|7qSLzSkQ=w0.zdֿcHbS
-[ZBY[Bo	˧sz´',瞰=a)M;q	SO藞0'GK׎0.
aYB97P\Ҏﶟo?bB!ݶț(
BYa<Ϡ2g  0(g$AueP>3ȿ̠VEp5tE7*K<9
^*Z,G1ĠuHe5<x9J,cj;GunlW c^¾U7SZsI!:l'iYn(won;NRY˘
սQK*p3/O26ԭ:ֈkVsyZkG_NI5l2*sn[L!	'QUDNf2lŲ|.6^dbjr$V<{e \E+~Jjbm(H몪[;3L,"S>SցB%UMqJftv0,qs)=
%yDa~B/2D(Zp7=	:A?o4O
_SPWD3֬s%inJҖ@)O;:ر7"m]\F<KIocZ1/DҔUA.A~ed9c^^qUdm4aD""*`<Z s~ye6jcbBJLV9൱'dm̙:	55V){b*"^Leq{ȧ¹]jWuVV
J0x!+:H)w#*t0ZZ`)fgPvĞJ#8b#;d<NM 7o"U逬{j<yXAF`HIlW<1Y31ЭN2Lm-[95\!-NSKj*8y?2(1‚߈Z<|igUǿNuijdeYjGvyWс\=
endstream
endobj
28 0 obj
<</CS 34 0 R/I false/K false/S/Transparency>>
endobj
33 0 obj
<</BitsPerComponent 8/ColorSpace 35 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 61/Length 472/Width 105>>stream
8;Z]";%A44#_oP0-P&T%n1Yoof3&-^[3eKto78=S2H_7&_U%*k6Cd$S/%cYdnA%ON
&H5YlO3!sYr"8a'SNe=kT$hf@K$0J+\(7S6l_GC1B?AT(0i=pV&.rqhlBi43,@c8s
/ed34h/g'!gJ<8D<;47ooGpi1Y3cBI;&qMi#LP98E#ng93if<F8#s4"2ai-9hXHb#
k3;n6X[E#E81(`(KI53K91L%LmpXZ4-T.6$H^M0%C?nh/@7o$'[B=/>\kP1reN$"I
)8tW36u,Aa!*EeGXo'3M6Im-e")BR/>*kdJEXHgT=TR:iA4O^eUCP9Ao<%am.Le^L
SXXEcgkaDLCPZ)@L7>O6L'Ws@NDI8B,HS5(bdICqJ/goUP_^C,<@0nV\3!A-h'kb2
/Y:3amRq=%AS08V+k:^?"*8R+K8UX%87]4e1Mmfon9k7s7`(e_r"8a'SNe<JWdBZf
2ZPO85@O~>
endstream
endobj
35 0 obj
[/Indexed/DeviceRGB 255 36 0 R]
endobj
36 0 obj
<</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
endstream
endobj
32 0 obj
<</BBox[258.0 399.0 712.0 151.0]/Group 37 0 R/Length 43/Matrix[1.0 0.0 0.0 1.0 0.0 0.0]/Resources<</ColorSpace<</CS0 38 0 R>>/ExtGState<</GS0 39 0 R>>/ProcSet[/PDF/ImageC/ImageI]/XObject<</Im0 40 0 R>>>>/Subtype/Form>>stream
q
/GS0 gs
454 0 0 248 258 151 cm
/Im0 Do
Q

endstream
endobj
37 0 obj
<</I false/K false/S/Transparency/Type/Group>>
endobj
40 0 obj
<</BitsPerComponent 8/ColorSpace 38 0 R/Decode[0.0 255.0]/Filter/FlateDecode/Height 248/Intent/RelativeColorimetric/Length 2172/Name/X/SMask 41 0 R/Subtype/Image/Type/XObject/Width 454>>stream
Hю8C;,wMb"8:oZӦ׫ia9W0ْ0+k;eS.f/lL9E҆X<\[`"5d	(A\䕈
kҐy1P[*)8
A$òDez!tX(/	Q1~W#0|	AkQXF$ȕ(#^BB
*.!r
5(ŹAUvAuv&Avf>R4;3#Tr/~C^S%X+An`Jֈ rز!H\BpmP55]VtM|=;[E;Qhhwb2,WUSݜJ߅	iވ̈݋&}%F|/?+ې8\՞Daj%#X	zD5`)!EO-qZ9!DZ"MP-&)CK$
%r%)ҢhiYE,Z"A^-'0GKDỊ%DA2iDHZ"Bl&- 6J['88Lr,-q\Z 1“iCd'Kly1:F#5&I|XXm1(Z52aqcC8I|Hf%ŀH%>Lcd"12OҘG'iJ4Q'-.KPs4ƅQj)ӲaQTK|Ƭ$%>CcT
mD#4& A1$>@cN
:k	A)-BJ^cHbk@вB2[kH11!W':غ
Y/܍O(݌O*މyވj߅	KaVFP	[hoiZ	A60kC
l$tW>(A֊ jw0Ez1%䱺^f	qv"BAȶPFAu&AU(A5h
[H\@5QD`AEaa1Fa
!Gab	F bڢ04>8L[ԅm9-Q\"+ %JBCfDAbu
E(ȖW(JE`bjkmV!Wk`ĹZEצ->QnRnV7kiii)<~]3zn.zǥ^x'^vv>z:+w:-nUByqKwn
qOˆ׍,Bo-xϋ[^;-R.$U7v>;6-|G&]Tѳ[knTii8xPɋ[n6$90``=O0)|`yo%l-Ђxcbc\--ӷEGE~;ZXMA8gqr`gs
fa|:NbW p7hx[-**";
Y:UumKEQqbCh؀ƻ[#:H'#+%g"ҾxWHL,G8]^NkqGDYEbXa߫V8!DpxqjE?8tE[G,sy8-p|Igy DώYo_ipȬE{]~˦HKZZivD?`t745??
"\èN+jQXdO7egc<'iۜRb"d$reMb[ZNK5"C?`S/njt|Ӭ^\	V]	M=~5 PZto7mNl-@[܁mqZ-h;-@w-nA[܁H݁%{q`5ފG[8oÉx%lt7ĵ'yX=#~t2tNmos?`
endstream
endobj
38 0 obj
[/Indexed 29 0 R 1 42 0 R]
endobj
41 0 obj
<</BitsPerComponent 8/ColorSpace/DeviceGray/DecodeParms<</BitsPerComponent 4/Colors 1/Columns 454>>/Filter/FlateDecode/Height 248/Intent/RelativeColorimetric/Length 32074/Name/X/Subtype/Image/Type/XObject/Width 454>>stream
HWgXgUv!	l (2RDDP(""Կ	ʈŕ}r}?/
ߦ6kc0~u+{_~?UJ!lZ
O3ݿTKћan
66vvU
9ݗZUoSj=.!$ '7@7' 	>l$;WRfTi=cIBv@Ň`y<\tfx>y¯:o	2.p,^XDL@$JDÇE5Dc#?C.>7+-5#&*"22:CCNn$L8QZ""(+ʓ	x~KQ8	iR>@!	
!L#(J!+fHR84x06024BXAQ4YAE][OĔj"PMMTe$0@F0ۼYE5͆p:*H_WS"%G#  |8QIC8)\HEQCPuM̭m]=VwwWg'f$	A0H4NLZAcJHGLg
txqY%mN.qw7WgG;ke~Q`
E%I꺆f[\<		]>BB޹TGIFF!Qxqf3[>CA^ۭ5%!|"
(n{JA0ƺ+	\$EdG~D;wa9qh>mƚrD!4#(AV7uȩ <},ӞdDpQ
3"Ll}u}z9[İ(.U\>cd|tT\ki7o.YYW~>w*ROIZ/"z)rJzfȗu#㗫P.X;䵩:~6>)5=F'ljIxfM&\ckA#bӳn- '<lUeŅ	@D݁q7?.*JAح#-txZ5@Dvn^;$"!%O<~{gZ*,?NJHkX::x-v_oXjkIK8k* &F$:qI~Aq%7χ:c½
Š5MJ+~ZaNJI7+]yU7+(R=BO&<xEuݛ.pLgue2/	H$H<q)կ;/D$C7k2B% JR7v>r.9Msk[ڗŹ']-)ݰG	8h?c\[Po`hxdtli[S=ᔿ2YZeǡ׽o.M=tvcuYQUU!"1"2v{CWnj{S]v?-?%4""rƶ¢.e-,ozMNM.33S5e@#&Z$YS?xwx|r73=96B樂kg"-Z
SM
zmH{cUAl6+`ktb "FXRvS^ٹebaa~nfrlͫ?YmV#Q>aiZ{Gh3s ɑw5w(
Þ
=#r@ӓ*^p|IÚ'@D)E]B#/eV6tPעBi(
Ѐ)nY?|ӧsS=9IgyXAnTW'T^5Njمoi+n*ʹކ5Gnlz.â*x{sgmzf~`9uz66R[HV$˒u͝N_V=8Fda~
\YbvFuɞRvL,x9<9o}6[e)xYPD="IS58]spAF_	6'X*Qӷ;zG&h@B~079Qf<c	VpS+^wffi
atSE
~K-`^zznWF{+(Hpڬ,K$HQ4mr|e[uq6P -樗̊쩽ѩLj|YpwҗK'rλ{"SGg]_P}[ƌ10X1!d-V"("KBG[IIQiN)&te,EJQ~$P|~?XW[^q@5:LE<]]iG37ZZ:>z4ǿ?vwΗxzw80
k>,W[2?!@QgUXPdͱw#]ڛ߫(Gee%+&ۛ0rjl'ЃIEں#㣃eC팿p҆'oa+gje|. 1X|&fܨly#pak}me_Ϳr9o]L^CLYLy
LgL7DJLe\ɽw9zaqIU}{W?ɏ`ZK™~LwEWS5=l`R&Qĉ(i{VP58~`h)]uܙS)'QR҉Ą1axm5Q E#רG?t29%/RF!-%h"ਗ਼4s=-ܸɌ'%dŤhj6nAgK;P߽h^:z"Q"##"Q؞Р]#mMZ F$(0u7n7jd^NaY^&|֎/$9iL6s߉i<&"OG!0Q	Ys̩\~~ıM5^ʱCQaz{m>pYj(/'D)&n=<<}wKθzޗ`r>SYp!m2s\
@HJEj;7k(BLz(\-\G{u66ʊcnjP"bEDxq2Ukhւceemmc΁#88/&C	'.c(!,v{S ؊`YCgU<L|~5#pnMl,Llbhk3 Mq"`FWU[Jeͬ7GƟ/	$|ǹOnJ׻<-4<jE0#?PO[Mq^zBt{
*CEEy^
4*L"ⱘeK.]$9`k뭱u
]+kD^<9hc#
6[

3):.
:^[`i{ͭq~c]*J
49,"3RD1Q,e"8<A$IFCҔZV\߈-ݰ><Ryd'fȄlntr-S!Q=#r
]C&"7-6ԛkm`(.HK$ʼnDB$"eؠ8Q"Q\BRZo`efQu3$ˑoEьŐCgGȆ \e]9BhȊZk7L^|7NdžlhɐHpX,`B!,L<K@i>k$fs!\vRUV:xOϴۯ	ownjz\vjTG0Y	T!L%K	j$i	cpb$}61%%JׯTPGFel?ݯBSfduJyk10c#}5E	ײ2$Zk	/^FgItMYl91@6`t%ŕF!ۮ`*`Y+}4/8C]
ܔh?.q<Vx2^8Sľ>LhgK+
1zˮ)9S,@x*(̲t
Mx% #;
x\DQQH1Xf>	n3ڪ2:ωxlۗu!OBHU_WßݍwsO7ќE"d
Download .txt
gitextract_9m4195d4/

├── .dockerignore
├── .editorconfig
├── .editorconfig.inferred
├── .gitignore
├── AGENTS.md
├── CLAUDE.md
├── CapFrameX.sln
├── Jenkinsfile
├── LICENSE
├── PORTABLE_MODE.md
├── README.md
├── benchlab-service/
│   ├── PMD_Service.deps.json
│   ├── PMD_Service.runtimeconfig.json
│   ├── appsettings.Development.json
│   └── appsettings.json
├── capframex-linux/
│   ├── .gitignore
│   ├── .vscode/
│   │   ├── launch.json
│   │   ├── settings.json
│   │   └── tasks.json
│   ├── CLAUDE.md
│   ├── CMakeLists.txt
│   ├── CX Logo/
│   │   ├── CapFrameX.ai
│   │   ├── CapFrameX.eps
│   │   ├── CapFrameXLogoOnly.ai
│   │   └── CapFrameXLogoOnly.eps
│   ├── Display_Timing_Tracker_DEV_PLAN.md
│   ├── OVERLAY_DEV_PLAN.md
│   ├── README.md
│   ├── capframex.desktop
│   ├── scripts/
│   │   ├── build.sh
│   │   ├── capframex-daemon.service
│   │   ├── install-layer.sh
│   │   ├── install.sh
│   │   ├── run-dev.sh
│   │   ├── uninstall-layer.sh
│   │   └── uninstall.sh
│   └── src/
│       ├── app/
│       │   ├── CapFrameX.App/
│       │   │   ├── App.axaml
│       │   │   ├── App.axaml.cs
│       │   │   ├── CapFrameX.App.csproj
│       │   │   ├── Program.cs
│       │   │   ├── ViewModels/
│       │   │   │   ├── AnalysisViewModel.cs
│       │   │   │   ├── CaptureViewModel.cs
│       │   │   │   ├── CompareViewModel.cs
│       │   │   │   ├── MainViewModel.cs
│       │   │   │   └── SettingsViewModel.cs
│       │   │   ├── Views/
│       │   │   │   ├── AnalysisView.axaml
│       │   │   │   ├── AnalysisView.axaml.cs
│       │   │   │   ├── CaptureView.axaml
│       │   │   │   ├── CaptureView.axaml.cs
│       │   │   │   ├── CompareView.axaml
│       │   │   │   ├── CompareView.axaml.cs
│       │   │   │   ├── MainWindow.axaml
│       │   │   │   ├── MainWindow.axaml.cs
│       │   │   │   ├── SettingsPanel.axaml
│       │   │   │   └── SettingsPanel.axaml.cs
│       │   │   └── app.manifest
│       │   ├── CapFrameX.Core/
│       │   │   ├── Analysis/
│       │   │   │   ├── FrametimeAnalyzer.cs
│       │   │   │   └── StatisticsCalculator.cs
│       │   │   ├── CapFrameX.Core.csproj
│       │   │   ├── Capture/
│       │   │   │   ├── DaemonClient.cs
│       │   │   │   └── FrametimeReceiver.cs
│       │   │   ├── Configuration/
│       │   │   │   ├── AppSettings.cs
│       │   │   │   └── SettingsService.cs
│       │   │   ├── Data/
│       │   │   │   ├── Session.cs
│       │   │   │   └── SessionManager.cs
│       │   │   ├── Hardware/
│       │   │   │   ├── CpuInfo.cs
│       │   │   │   ├── GpuInfo.cs
│       │   │   │   ├── HardwareMonitor.cs
│       │   │   │   ├── SysfsReader.cs
│       │   │   │   └── VulkanGpuEnumerator.cs
│       │   │   ├── Hotkey/
│       │   │   │   └── GlobalHotkeyService.cs
│       │   │   └── System/
│       │   │       └── SystemInfoService.cs
│       │   ├── CapFrameX.Shared/
│       │   │   ├── CapFrameX.Shared.csproj
│       │   │   ├── IPC/
│       │   │   │   ├── Messages.cs
│       │   │   │   └── SocketClient.cs
│       │   │   └── Models/
│       │   │       ├── CaptureSession.cs
│       │   │       ├── FrameData.cs
│       │   │       └── GameInfo.cs
│       │   ├── CapFrameX.sln
│       │   └── FrameReceptionTest/
│       │       ├── FrameReceptionTest.csproj
│       │       └── Program.cs
│       ├── daemon/
│       │   ├── CMakeLists.txt
│       │   ├── common.h
│       │   ├── config.c
│       │   ├── config.h
│       │   ├── ignore_list.c
│       │   ├── ignore_list.h
│       │   ├── ipc.c
│       │   ├── ipc.h
│       │   ├── launcher_detect.c
│       │   ├── launcher_detect.h
│       │   ├── main.c
│       │   ├── process_monitor.c
│       │   └── process_monitor.h
│       └── layer/
│           ├── CMakeLists.txt
│           ├── capframex_layer.json
│           ├── data_export.c
│           ├── data_export.h
│           ├── ipc_client.c
│           ├── ipc_client.h
│           ├── layer.c
│           ├── layer.h
│           ├── swapchain.c
│           ├── swapchain.h
│           ├── timing.c
│           └── timing.h
├── dev-plans/
│   ├── MCP_Integration_DevPlan.md
│   ├── MCP_Server_Implementation_NET472_WPF_App.md
│   └── PantherLake_IMC_Clock_PawnIO_PR_Plan.md
├── overlay-templates/
│   └── OverlayEntryConfiguration_0.json
├── pmcreader-plugin/
│   ├── AGENTS.md
│   ├── CapFrameX.PmcReader.Merged.csproj
│   ├── CapFrameX.PmcReader.Plugin.csproj
│   ├── PmcReader/
│   │   ├── .gitattributes
│   │   ├── .gitignore
│   │   ├── AMD/
│   │   │   ├── Amd10hCpu.cs
│   │   │   ├── Amd15hCpu.cs
│   │   │   ├── Amd16hCpu.cs
│   │   │   ├── Amd17hCpu.cs
│   │   │   ├── Amd19hCpu.cs
│   │   │   ├── Bulldozer.cs
│   │   │   ├── Jaguar.cs
│   │   │   ├── JaguarL2.cs
│   │   │   ├── JaguarNorthbridge.cs
│   │   │   ├── K10.cs
│   │   │   ├── Piledriver.cs
│   │   │   ├── PiledriverNorthbridge.cs
│   │   │   ├── Zen.cs
│   │   │   ├── Zen1.cs
│   │   │   ├── Zen2.cs
│   │   │   ├── Zen2DataFabric.cs
│   │   │   ├── Zen2L3Cache.cs
│   │   │   ├── Zen3.cs
│   │   │   ├── Zen3L3Cache.cs
│   │   │   ├── Zen4.cs
│   │   │   ├── Zen4DataFabric.cs
│   │   │   ├── Zen4L3Cache.cs
│   │   │   ├── Zen5.cs
│   │   │   ├── Zen5DataFabric.cs
│   │   │   ├── Zen5Diagnostics.cs
│   │   │   ├── Zen5L3Cache.cs
│   │   │   └── ZenL3Cache.cs
│   │   ├── App.config
│   │   ├── Cpu.cs
│   │   ├── GenericMonitoringArea.cs
│   │   ├── HaswellForm.Designer.cs
│   │   ├── HaswellForm.cs
│   │   ├── HaswellForm.resx
│   │   ├── Intel/
│   │   │   ├── AlderLake.cs
│   │   │   ├── AlderLakeL3.cs
│   │   │   ├── AlderLakeUncore.cs
│   │   │   ├── ArrowLake.cs
│   │   │   ├── ArrowLakeL3.cs
│   │   │   ├── GoldmontPlus.cs
│   │   │   ├── Haswell.cs
│   │   │   ├── HaswellClientArb.cs
│   │   │   ├── HaswellClientL3.cs
│   │   │   ├── HaswellClientUncore.cs
│   │   │   ├── HaswellEL3.cs
│   │   │   ├── MeteorLake.cs
│   │   │   ├── MeteorLakeArb.cs
│   │   │   ├── MeteorLakeL3.cs
│   │   │   ├── MeteorLakeUncore.cs
│   │   │   ├── ModernIntelCpu.cs
│   │   │   ├── SandyBridge.cs
│   │   │   ├── SandyBridgeEL3.cs
│   │   │   ├── SandyBridgeUncore.cs
│   │   │   ├── Skylake.cs
│   │   │   ├── SkylakeClientArb.cs
│   │   │   ├── SkylakeClientL3.cs
│   │   │   └── SkylakeClientUncore.cs
│   │   ├── Interop/
│   │   │   ├── AdvApi32.cs
│   │   │   ├── Kernel32.cs
│   │   │   ├── KernelDriver.cs
│   │   │   ├── OpCode.cs
│   │   │   ├── Ring0.cs
│   │   │   ├── ThreadAffinity.cs
│   │   │   ├── WinRing0.sys
│   │   │   ├── WinRing0x64.sys
│   │   │   └── winpmem_64.sys
│   │   ├── LICENSE
│   │   ├── PmcDiagnostics.cs
│   │   ├── PmcReader.csproj
│   │   ├── PmcReader.sln
│   │   ├── PmcReaderInterop.cs
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── Resources.Designer.cs
│   │   │   ├── Resources.resx
│   │   │   ├── Settings.Designer.cs
│   │   │   └── Settings.settings
│   │   ├── README.md
│   │   └── app.manifest
│   ├── PmcReader.TestApp/
│   │   ├── App.xaml
│   │   ├── App.xaml.cs
│   │   ├── MainWindow.xaml
│   │   ├── MainWindow.xaml.cs
│   │   ├── PmcReader.TestApp.csproj
│   │   ├── SensorRow.cs
│   │   └── packages.config
│   ├── PmcReader.TestApp.sln
│   ├── PmcReaderInterop.Forwarder.cs
│   ├── PmcReaderSensorEntry.cs
│   ├── PmcReaderSensorPlugin.cs
│   ├── intel-perfmon/
│   │   ├── .github/
│   │   │   ├── CODEOWNERS
│   │   │   ├── bandit.yml
│   │   │   ├── dependabot.yml
│   │   │   └── workflows/
│   │   │       ├── bandit.yml
│   │   │       ├── codeql.yml
│   │   │       ├── create-perf-json.yml
│   │   │       ├── format-checks.yml
│   │   │       └── scorecard.yml
│   │   ├── .gitignore
│   │   ├── ADL/
│   │   │   ├── events/
│   │   │   │   ├── alderlake_goldencove_core.json
│   │   │   │   ├── alderlake_gracemont_core.json
│   │   │   │   ├── alderlake_uncore.json
│   │   │   │   └── alderlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── alderlake_metrics_goldencove_core.json
│   │   ├── ARL/
│   │   │   ├── events/
│   │   │   │   ├── arrowlake_crestmont_core.json
│   │   │   │   ├── arrowlake_lioncove_core.json
│   │   │   │   ├── arrowlake_skymont_core.json
│   │   │   │   ├── arrowlake_uncore.json
│   │   │   │   └── arrowlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── arrowlake_metrics_lioncove_core.json
│   │   ├── Atom_TMA.csv
│   │   ├── Atom_TMA.xlsx
│   │   ├── BDW/
│   │   │   ├── events/
│   │   │   │   ├── broadwell_core.json
│   │   │   │   ├── broadwell_fp_arith_inst.json
│   │   │   │   ├── broadwell_matrix.json
│   │   │   │   └── broadwell_uncore.json
│   │   │   └── metrics/
│   │   │       └── broadwell_metrics.json
│   │   ├── BDW-DE/
│   │   │   └── events/
│   │   │       ├── broadwellde_core.json
│   │   │       └── broadwellde_uncore.json
│   │   ├── BDX/
│   │   │   ├── events/
│   │   │   │   ├── broadwellx_core.json
│   │   │   │   ├── broadwellx_matrix.json
│   │   │   │   └── broadwellx_uncore.json
│   │   │   └── metrics/
│   │   │       ├── broadwellx_metrics.json
│   │   │       └── perf/
│   │   │           └── broadwellx_metrics_perf.json
│   │   ├── BNL/
│   │   │   └── events/
│   │   │       └── bonnell_core.json
│   │   ├── CLX/
│   │   │   ├── events/
│   │   │   │   ├── cascadelakex_core.json
│   │   │   │   ├── cascadelakex_fp_arith_inst.json
│   │   │   │   ├── cascadelakex_uncore.json
│   │   │   │   └── cascadelakex_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── cascadelakex_metrics.json
│   │   │       └── perf/
│   │   │           └── cascadelakex_metrics_perf.json
│   │   ├── CWF/
│   │   │   ├── events/
│   │   │   │   ├── clearwaterforest_core.json
│   │   │   │   ├── clearwaterforest_uncore.json
│   │   │   │   └── clearwaterforest_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── clearwaterforest_metrics.json
│   │   │       └── perf/
│   │   │           └── clearwaterforest_metrics_perf.json
│   │   ├── E-core_TMA_Metrics.csv
│   │   ├── E-core_TMA_Metrics.xlsx
│   │   ├── EHL/
│   │   │   └── events/
│   │   │       └── elkhartlake_core.json
│   │   ├── EMR/
│   │   │   ├── events/
│   │   │   │   ├── emeraldrapids_core.json
│   │   │   │   ├── emeraldrapids_uncore.json
│   │   │   │   └── emeraldrapids_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── emeraldrapids_metrics.json
│   │   │       └── perf/
│   │   │           └── emeraldrapids_metrics_perf.json
│   │   ├── GLM/
│   │   │   └── events/
│   │   │       ├── goldmont_core.json
│   │   │       ├── goldmont_fp_arith_inst.json
│   │   │       └── goldmont_matrix.json
│   │   ├── GLP/
│   │   │   └── events/
│   │   │       ├── goldmontplus_core.json
│   │   │       ├── goldmontplus_fp_arith_inst.json
│   │   │       └── goldmontplus_matrix.json
│   │   ├── GNR/
│   │   │   ├── events/
│   │   │   │   ├── graniterapids_core.json
│   │   │   │   ├── graniterapids_uncore.json
│   │   │   │   └── graniterapids_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── graniterapids_metrics.json
│   │   │       ├── graniterapids_retire_latency.json
│   │   │       └── perf/
│   │   │           └── graniterapids_metrics_perf.json
│   │   ├── GRR/
│   │   │   ├── events/
│   │   │   │   ├── grandridge_core.json
│   │   │   │   ├── grandridge_uncore.json
│   │   │   │   └── grandridge_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── grandridge_metrics.json
│   │   │       └── perf/
│   │   │           └── grandridge_metrics_perf.json
│   │   ├── HSW/
│   │   │   ├── events/
│   │   │   │   ├── haswell_core.json
│   │   │   │   ├── haswell_fp_arith_inst.json
│   │   │   │   ├── haswell_matrix.json
│   │   │   │   └── haswell_uncore.json
│   │   │   └── metrics/
│   │   │       └── haswell_metrics.json
│   │   ├── HSX/
│   │   │   ├── events/
│   │   │   │   ├── haswellx_core.json
│   │   │   │   ├── haswellx_matrix.json
│   │   │   │   └── haswellx_uncore.json
│   │   │   └── metrics/
│   │   │       ├── haswellx_metrics.json
│   │   │       └── perf/
│   │   │           └── haswellx_metrics_perf.json
│   │   ├── ICL/
│   │   │   ├── events/
│   │   │   │   ├── icelake_core.json
│   │   │   │   └── icelake_uncore.json
│   │   │   └── metrics/
│   │   │       └── icelake_metrics.json
│   │   ├── ICX/
│   │   │   ├── events/
│   │   │   │   ├── icelakex_core.json
│   │   │   │   ├── icelakex_uncore.json
│   │   │   │   └── icelakex_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── icelakex_metrics.json
│   │   │       └── perf/
│   │   │           └── icelakex_metrics_perf.json
│   │   ├── IVB/
│   │   │   └── events/
│   │   │       ├── ivybridge_core.json
│   │   │       ├── ivybridge_fp_arith_inst.json
│   │   │       ├── ivybridge_matrix.json
│   │   │       └── ivybridge_uncore.json
│   │   ├── IVT/
│   │   │   └── events/
│   │   │       ├── ivytown_core.json
│   │   │       ├── ivytown_matrix.json
│   │   │       └── ivytown_uncore.json
│   │   ├── JKT/
│   │   │   └── events/
│   │   │       ├── Jaketown_core.json
│   │   │       ├── Jaketown_matrix.json
│   │   │       └── Jaketown_uncore.json
│   │   ├── KNL/
│   │   │   └── events/
│   │   │       ├── knightslanding_core.json
│   │   │       ├── knightslanding_matrix.json
│   │   │       └── knightslanding_uncore.json
│   │   ├── LICENSE
│   │   ├── LNL/
│   │   │   ├── events/
│   │   │   │   ├── lunarlake_lioncove_core.json
│   │   │   │   ├── lunarlake_skymont_core.json
│   │   │   │   ├── lunarlake_uncore.json
│   │   │   │   └── lunarlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── lunarlake_metrics_lioncove_core.json
│   │   ├── MTL/
│   │   │   ├── events/
│   │   │   │   ├── meteorlake_crestmont_core.json
│   │   │   │   ├── meteorlake_redwoodcove_core.json
│   │   │   │   ├── meteorlake_uncore.json
│   │   │   │   └── meteorlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── meteorlake_metrics_redwoodcove_core.json
│   │   ├── NHM-EP/
│   │   │   └── events/
│   │   │       └── NehalemEP_core.json
│   │   ├── NHM-EX/
│   │   │   └── events/
│   │   │       └── NehalemEX_core.json
│   │   ├── PTL/
│   │   │   └── events/
│   │   │       ├── pantherlake_cougarcove_core.json
│   │   │       ├── pantherlake_darkmont_core.json
│   │   │       └── pantherlake_uncore.json
│   │   ├── README.md
│   │   ├── RKL/
│   │   │   ├── events/
│   │   │   │   ├── rocketlake_core.json
│   │   │   │   ├── rocketlake_uncore.json
│   │   │   │   └── rocketlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── rocketlake_metrics.json
│   │   ├── SKL/
│   │   │   ├── events/
│   │   │   │   ├── skylake_core.json
│   │   │   │   ├── skylake_fp_arith_inst.json
│   │   │   │   └── skylake_uncore.json
│   │   │   └── metrics/
│   │   │       └── skylake_metrics.json
│   │   ├── SKX/
│   │   │   ├── events/
│   │   │   │   ├── skylakex_core.json
│   │   │   │   ├── skylakex_fp_arith_inst.json
│   │   │   │   ├── skylakex_uncore.json
│   │   │   │   └── skylakex_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── perf/
│   │   │       │   └── skylakex_metrics_perf.json
│   │   │       └── skylakex_metrics.json
│   │   ├── SLM/
│   │   │   └── events/
│   │   │       ├── Silvermont_core.json
│   │   │       └── Silvermont_matrix.json
│   │   ├── SNB/
│   │   │   └── events/
│   │   │       ├── sandybridge_core.json
│   │   │       ├── sandybridge_matrix.json
│   │   │       └── sandybridge_uncore.json
│   │   ├── SNR/
│   │   │   └── events/
│   │   │       ├── snowridgex_core.json
│   │   │       ├── snowridgex_uncore.json
│   │   │       └── snowridgex_uncore_experimental.json
│   │   ├── SPR/
│   │   │   ├── events/
│   │   │   │   ├── sapphirerapids_core.json
│   │   │   │   ├── sapphirerapids_uncore.json
│   │   │   │   └── sapphirerapids_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── perf/
│   │   │       │   ├── sapphirerapids_metrics_perf.json
│   │   │       │   └── sapphirerapidshbm_metrics_perf.json
│   │   │       ├── sapphirerapids_metrics.json
│   │   │       └── sapphirerapidshbm_metrics.json
│   │   ├── SRF/
│   │   │   ├── events/
│   │   │   │   ├── sierraforest_core.json
│   │   │   │   ├── sierraforest_uncore.json
│   │   │   │   └── sierraforest_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       ├── perf/
│   │   │       │   └── sierraforest_metrics_perf.json
│   │   │       └── sierraforest_metrics.json
│   │   ├── TGL/
│   │   │   ├── events/
│   │   │   │   ├── tigerlake_core.json
│   │   │   │   ├── tigerlake_uncore.json
│   │   │   │   └── tigerlake_uncore_experimental.json
│   │   │   └── metrics/
│   │   │       └── tigerlake_metrics.json
│   │   ├── TMA_Metrics-full.csv
│   │   ├── TMA_Metrics-full.xlsx
│   │   ├── WSM-EP-DP/
│   │   │   └── events/
│   │   │       └── WestmereEP-DP_core.json
│   │   ├── WSM-EP-SP/
│   │   │   └── events/
│   │   │       └── WestmereEP-SP_core.json
│   │   ├── WSM-EX/
│   │   │   └── events/
│   │   │       └── WestmereEX_core.json
│   │   ├── mapfile.csv
│   │   ├── requirements.txt
│   │   ├── scripts/
│   │   │   ├── ci/
│   │   │   │   ├── verify_mapfile/
│   │   │   │   │   ├── .coveragerc
│   │   │   │   │   ├── README.md
│   │   │   │   │   ├── __init__.py
│   │   │   │   │   ├── mapfile_schema.json
│   │   │   │   │   ├── requirements.txt
│   │   │   │   │   ├── test_data/
│   │   │   │   │   │   ├── 00_missing_mapfile_column/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 01_missing_event_file/
│   │   │   │   │   │   │   ├── SPR/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── sapphirerapids_core.json
│   │   │   │   │   │   │   │       └── sapphirerapids_uncore.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 02_mismatched_versions/
│   │   │   │   │   │   │   ├── SPR/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── sapphirerapids_core.json
│   │   │   │   │   │   │   │       └── sapphirerapids_uncore.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 03_correct_event_types/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 04_platform_referencing_multiple_event_dirs/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 05_mapfile_missing_event_file_reference/
│   │   │   │   │   │   │   ├── ICX/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── icelakex_core.json
│   │   │   │   │   │   │   │       ├── icelakex_uncore.json
│   │   │   │   │   │   │   │       └── icelakex_uncore_experimental.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 06_extra_mapfile_column/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 07_duplicate_event_file_type/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 08_mismatched_event_file_versions/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 09_correct_mapfile/
│   │   │   │   │   │   │   ├── SPR/
│   │   │   │   │   │   │   │   └── events/
│   │   │   │   │   │   │   │       ├── sapphirerapids_core.json
│   │   │   │   │   │   │   │       └── sapphirerapids_uncore.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 10_bad_mapfile_version/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 11_mismatched_file_type/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 12_unexpected_file_path/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 13_duplicate_metric_entries/
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   ├── 14_mapfile_missing_latency_file_reference/
│   │   │   │   │   │   │   ├── GNR/
│   │   │   │   │   │   │   │   ├── events/
│   │   │   │   │   │   │   │   │   ├── graniterapids_core.json
│   │   │   │   │   │   │   │   │   ├── graniterapids_uncore.json
│   │   │   │   │   │   │   │   │   └── graniterapids_uncore_experimental.json
│   │   │   │   │   │   │   │   └── metrics/
│   │   │   │   │   │   │   │       ├── graniterapids_metrics.json
│   │   │   │   │   │   │   │       └── graniterapids_retire_latency.json
│   │   │   │   │   │   │   └── mapfile.csv
│   │   │   │   │   │   └── 15_platform_referencing_multiple_metric_dirs/
│   │   │   │   │   │       └── mapfile.csv
│   │   │   │   │   ├── test_verify_mapfile.py
│   │   │   │   │   └── verify_mapfile.py
│   │   │   │   └── verify_perf_uncore_events/
│   │   │   │       ├── .coveragerc
│   │   │   │       ├── README.md
│   │   │   │       ├── __init__.py
│   │   │   │       ├── perf_uncore_csv_schema.json
│   │   │   │       ├── requirements.txt
│   │   │   │       ├── test_data/
│   │   │   │       │   ├── 00_basic.csv
│   │   │   │       │   ├── 01_missing_header.csv
│   │   │   │       │   └── 02_missing_column.csv
│   │   │   │       ├── test_verify_config.py
│   │   │   │       └── verify_perf_uncore_events.py
│   │   │   ├── config/
│   │   │   │   ├── perf-uncore-events-bdx.csv
│   │   │   │   ├── perf-uncore-events-clx.csv
│   │   │   │   ├── perf-uncore-events-hsw.csv
│   │   │   │   ├── perf-uncore-events-hsx.csv
│   │   │   │   ├── perf-uncore-events-icx.csv
│   │   │   │   ├── perf-uncore-events-ivb.csv
│   │   │   │   ├── perf-uncore-events-skx.csv
│   │   │   │   ├── perf-uncore-events-snb.csv
│   │   │   │   ├── perf-uncore-events-snr.csv
│   │   │   │   ├── perf-uncore-events-spr.csv
│   │   │   │   ├── platform_config.json
│   │   │   │   └── replacements_config.json
│   │   │   ├── create_perf_json.py
│   │   │   ├── metric.py
│   │   │   ├── perf_format_converter.py
│   │   │   └── unittesting/
│   │   │       ├── metric_test.py
│   │   │       ├── test_create_perf_json.py
│   │   │       ├── test_inputs/
│   │   │       │   └── test_input_1.json
│   │   │       └── test_perf_format_converter.py
│   │   ├── secure-pmu-access-1.01.csv
│   │   └── security.md
│   └── packages.config
├── portable.json.sample
├── source/
│   ├── CapFrameX/
│   │   ├── App.config
│   │   ├── App.xaml
│   │   ├── App.xaml.cs
│   │   ├── AppHelper.cs
│   │   ├── Bootstrapper.cs
│   │   ├── CapFrameX.csproj
│   │   ├── CapFrameXViewRegion.cs
│   │   ├── DebugMonitorWindow.xaml
│   │   ├── DebugMonitorWindow.xaml.cs
│   │   ├── Files/
│   │   │   └── bf0822e8-2e55-4b99-82ee-939d8ac2384e.bat
│   │   ├── HelpTexts/
│   │   │   └── ChartControls.rtf
│   │   ├── IconHelper.cs
│   │   ├── InMemorySink.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── Resources.Designer.cs
│   │   │   ├── Resources.resx
│   │   │   ├── Settings.Designer.cs
│   │   │   └── Settings.settings
│   │   ├── RegionManagerWrapper.cs
│   │   ├── Shell.xaml
│   │   ├── Shell.xaml.cs
│   │   ├── WindowStateTracker.cs
│   │   ├── app.manifest
│   │   ├── benchlab-service.items
│   │   └── portable.json.sample
│   ├── CapFrameX.ADLX/
│   │   ├── ADLXManager.cpp
│   │   ├── ADLXManager.h
│   │   ├── CapFrameX.ADLX.vcxproj
│   │   ├── CapFrameX.ADLX.vcxproj.filters
│   │   ├── SDK/
│   │   │   ├── ADLXHelper/
│   │   │   │   └── Windows/
│   │   │   │       ├── C/
│   │   │   │       │   ├── ADLXHelper.c
│   │   │   │       │   └── ADLXHelper.h
│   │   │   │       └── Cpp/
│   │   │   │           ├── ADLXHelper.cpp
│   │   │   │           └── ADLXHelper.h
│   │   │   ├── Include/
│   │   │   │   ├── ADLX.h
│   │   │   │   ├── ADLXDefines.h
│   │   │   │   ├── ADLXStructures.h
│   │   │   │   ├── ADLXVersion.h
│   │   │   │   ├── I3DSettings.h
│   │   │   │   ├── I3DSettings1.h
│   │   │   │   ├── I3DSettings2.h
│   │   │   │   ├── I3DSettings3.h
│   │   │   │   ├── IApplications.h
│   │   │   │   ├── IChangedEvent.h
│   │   │   │   ├── ICollections.h
│   │   │   │   ├── IDesktops.h
│   │   │   │   ├── IDisplay3DLUT.h
│   │   │   │   ├── IDisplayGamma.h
│   │   │   │   ├── IDisplayGamut.h
│   │   │   │   ├── IDisplaySettings.h
│   │   │   │   ├── IDisplays.h
│   │   │   │   ├── IDisplays1.h
│   │   │   │   ├── IDisplays2.h
│   │   │   │   ├── IDisplays3.h
│   │   │   │   ├── IGPUAutoTuning.h
│   │   │   │   ├── IGPUManualFanTuning.h
│   │   │   │   ├── IGPUManualGFXTuning.h
│   │   │   │   ├── IGPUManualPowerTuning.h
│   │   │   │   ├── IGPUManualVRAMTuning.h
│   │   │   │   ├── IGPUPresetTuning.h
│   │   │   │   ├── IGPUTuning.h
│   │   │   │   ├── IGPUTuning1.h
│   │   │   │   ├── II2C.h
│   │   │   │   ├── ILog.h
│   │   │   │   ├── IMultiMedia.h
│   │   │   │   ├── IPerformanceMonitoring.h
│   │   │   │   ├── IPerformanceMonitoring1.h
│   │   │   │   ├── IPerformanceMonitoring2.h
│   │   │   │   ├── IPerformanceMonitoring3.h
│   │   │   │   ├── IPowerTuning.h
│   │   │   │   ├── IPowerTuning1.h
│   │   │   │   ├── ISmartAccessMemory.h
│   │   │   │   ├── ISystem.h
│   │   │   │   ├── ISystem1.h
│   │   │   │   ├── ISystem2.h
│   │   │   │   └── ISystem3.h
│   │   │   └── Platform/
│   │   │       └── Windows/
│   │   │           ├── WinAPIs.c
│   │   │           └── WinAPIs.cpp
│   │   ├── dllmain.cpp
│   │   ├── framework.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CapFrameX.ApiInterface/
│   │   ├── CapFrameX.Remote.csproj
│   │   ├── CaptureController.cs
│   │   ├── JsonPayload/
│   │   │   └── StartCapturePayload.cs
│   │   ├── MetricsController.cs
│   │   ├── OSDController.cs
│   │   ├── OSDWebsocketModule.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SensorWebsocketModule.cs
│   │   ├── VersionController.cs
│   │   ├── WebserverFactory.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.CXServicex86/
│   │   ├── CSharpWrapper.cpp
│   │   ├── CSharpWrapper.h
│   │   ├── CapFrameX.CXServicex86.cpp
│   │   ├── CapFrameX.CXServicex86.vcxproj
│   │   └── CapFrameX.CXServicex86.vcxproj.filters
│   ├── CapFrameX.Capture.Contracts/
│   │   ├── CapFrameX.Capture.Contracts.csproj
│   │   ├── ICaptureService.cs
│   │   ├── IRecordDirectoryObserver.cs
│   │   ├── IServiceStateInfo.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Charts/
│   │   ├── Core40/
│   │   │   ├── AxisCore.cs
│   │   │   ├── AxisOrientation.cs
│   │   │   ├── AxisPosition.cs
│   │   │   ├── AxisSectionCore.cs
│   │   │   ├── AxisWindow.cs
│   │   │   ├── AxisWindows.cs
│   │   │   ├── BarLabelPosition.cs
│   │   │   ├── ChartFunctions.cs
│   │   │   ├── ChartPoint.cs
│   │   │   ├── ChartUpdater.cs
│   │   │   ├── ChartValues.cs
│   │   │   ├── Charting.cs
│   │   │   ├── Charts/
│   │   │   │   ├── CartesianChartCore.cs
│   │   │   │   ├── ChartCore.cs
│   │   │   │   └── PieChartCore.cs
│   │   │   ├── Configurations/
│   │   │   │   ├── CartesianMapper.cs
│   │   │   │   ├── FinancialMapper.cs
│   │   │   │   ├── GanttMapper.cs
│   │   │   │   ├── IPointEvaluator.cs
│   │   │   │   ├── Mappers.cs
│   │   │   │   ├── PieMapper.cs
│   │   │   │   ├── PolarMapper.cs
│   │   │   │   └── WeightedMapper.cs
│   │   │   ├── Core.csproj
│   │   │   ├── Core40.csproj.DotSettings
│   │   │   ├── DataLabelViewModel.cs
│   │   │   ├── DateAxisCore.cs
│   │   │   ├── DateAxisWindow.cs
│   │   │   ├── DateAxisWindows.cs
│   │   │   ├── DateSeparatorElementCore.cs
│   │   │   ├── Defaults/
│   │   │   │   ├── AxisLimits.cs
│   │   │   │   ├── DateTimePoint.cs
│   │   │   │   ├── GanttPoint.cs
│   │   │   │   ├── HeatPoint.cs
│   │   │   │   ├── OHLCPoint.cs
│   │   │   │   ├── ObservablePoint.cs
│   │   │   │   ├── ObservableValue.cs
│   │   │   │   ├── PolarPoint.cs
│   │   │   │   └── ScatterPoint.cs
│   │   │   ├── Definitions/
│   │   │   │   ├── Charts/
│   │   │   │   │   ├── IAxisSectionView.cs
│   │   │   │   │   ├── IAxisView.cs
│   │   │   │   │   ├── IAxisWindow.cs
│   │   │   │   │   ├── ICartesianChart.cs
│   │   │   │   │   ├── ICartesianVisualElement.cs
│   │   │   │   │   ├── IChartView.cs
│   │   │   │   │   ├── IDateAxisView.cs
│   │   │   │   │   ├── ILogarithmicAxisView.cs
│   │   │   │   │   ├── IPieChart.cs
│   │   │   │   │   ├── ISeparatorElementView.cs
│   │   │   │   │   ├── ISeparatorView.cs
│   │   │   │   │   └── IWindowAxisView.cs
│   │   │   │   ├── Points/
│   │   │   │   │   ├── IBezierPointView.cs
│   │   │   │   │   ├── IChartPointView.cs
│   │   │   │   │   ├── IHeatPointView.cs
│   │   │   │   │   ├── IOhlcPointView.cs
│   │   │   │   │   ├── IPieSlicePointView.cs
│   │   │   │   │   ├── IRectanglePointView.cs
│   │   │   │   │   ├── IScatterPointView.cs
│   │   │   │   │   └── IStepPointView.cs
│   │   │   │   └── Series/
│   │   │   │       ├── IAreaPoint.cs
│   │   │   │       ├── ICartesianSeries.cs
│   │   │   │       ├── IColumnSeriesView.cs
│   │   │   │       ├── IFinancialSeriesView.cs
│   │   │   │       ├── IGroupedStackedSeriesView.cs
│   │   │   │       ├── IHeatSeriesView.cs
│   │   │   │       ├── ILineSeriesView.cs
│   │   │   │       ├── IPieSeries.cs
│   │   │   │       ├── IPieSeriesView.cs
│   │   │   │       ├── IRowSeriesView.cs
│   │   │   │       ├── IScatterSeriesView.cs
│   │   │   │       ├── ISeriesView.cs
│   │   │   │       ├── IStackModelableSeriesView.cs
│   │   │   │       ├── IStackedAreaSeriesView.cs
│   │   │   │       ├── IStackedColumnSeriesView.cs
│   │   │   │       ├── IStackedRowSeriesView.cs
│   │   │   │       └── IVerticalStackedAreaSeriesView.cs
│   │   │   ├── Delegates.cs
│   │   │   ├── Dtos/
│   │   │   │   ├── BezierData.cs
│   │   │   │   ├── CoreColor.cs
│   │   │   │   ├── CoreGradientStop.cs
│   │   │   │   ├── CoreLimit.cs
│   │   │   │   ├── CoreMargin.cs
│   │   │   │   ├── CorePoint.cs
│   │   │   │   ├── CoreRectangle.cs
│   │   │   │   ├── CoreSize.cs
│   │   │   │   ├── LabelEvaluation.cs
│   │   │   │   ├── StackedSum.cs
│   │   │   │   └── TooltipDataViewModel.cs
│   │   │   ├── Events/
│   │   │   │   ├── Delegates.cs
│   │   │   │   ├── PreviewRangeChangedEventArgs.cs
│   │   │   │   └── RangeChangedEventArgs.cs
│   │   │   ├── Helpers/
│   │   │   │   ├── Extentions.cs
│   │   │   │   ├── LiveChartsException.cs
│   │   │   │   └── NoisyCollection.cs
│   │   │   ├── IChartValues.cs
│   │   │   ├── IObservableChartPoint.cs
│   │   │   ├── LegendLocation.cs
│   │   │   ├── LogarithmicAxisCore.cs
│   │   │   ├── Maps/
│   │   │   │   └── MapData.cs
│   │   │   ├── PanningOptions.cs
│   │   │   ├── PeriodUnits.cs
│   │   │   ├── PieLabelPosition.cs
│   │   │   ├── PointTracker.cs
│   │   │   ├── Properties/
│   │   │   │   └── AssemblyInfo.cs
│   │   │   ├── ScrollMode.cs
│   │   │   ├── SeparationState.cs
│   │   │   ├── SeparatorConfigurationCore.cs
│   │   │   ├── SeparatorElementCore.cs
│   │   │   ├── SeriesAlgorithms/
│   │   │   │   ├── CandleAlgorithm.cs
│   │   │   │   ├── ColumnAlgorithm.cs
│   │   │   │   ├── HeatAlgorithm.cs
│   │   │   │   ├── LineAlgorithm.cs
│   │   │   │   ├── OhlcAlgorithm.cs
│   │   │   │   ├── PieAlgorithm.cs
│   │   │   │   ├── RowAlgorithm.cs
│   │   │   │   ├── ScatterAlgorithm.cs
│   │   │   │   ├── StackedAreaAlgorithm.cs
│   │   │   │   ├── StackedColumnAlgorithm.cs
│   │   │   │   ├── StackedRowAlgorithm.cs
│   │   │   │   ├── StepLineAlgorithm.cs
│   │   │   │   ├── VerticalLineAlgorithm.cs
│   │   │   │   └── VerticalStackedAreaAlgorithm.cs
│   │   │   ├── SeriesCollection.cs
│   │   │   ├── SeriesOrientation.cs
│   │   │   ├── Seriesalgorithm.cs
│   │   │   ├── StackMode.cs
│   │   │   ├── TooltipSelectionMode.cs
│   │   │   ├── UpdaterState.cs
│   │   │   ├── VisualElementsCollection.cs
│   │   │   ├── WindowAxisCore.cs
│   │   │   ├── ZoomingOptions.cs
│   │   │   └── packages.config
│   │   ├── OxyPlot/
│   │   │   ├── Annotations/
│   │   │   │   ├── Annotation.cs
│   │   │   │   ├── AnnotationLayer.cs
│   │   │   │   ├── AnnotationTextOrientation.cs
│   │   │   │   ├── ArrowAnnotation.cs
│   │   │   │   ├── EllipseAnnotation.cs
│   │   │   │   ├── FunctionAnnotation.cs
│   │   │   │   ├── FunctionAnnotationType.cs
│   │   │   │   ├── ImageAnnotation.cs
│   │   │   │   ├── LineAnnotation.cs
│   │   │   │   ├── LineAnnotationType.cs
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── PathAnnotation.cs
│   │   │   │   ├── PointAnnotation.cs
│   │   │   │   ├── PolyLineAnnotation.cs
│   │   │   │   ├── PolygonAnnotation.cs
│   │   │   │   ├── RectangleAnnotation.cs
│   │   │   │   ├── ShapeAnnotation.cs
│   │   │   │   ├── TextAnnotation.cs
│   │   │   │   └── TextualAnnotation.cs
│   │   │   ├── Axes/
│   │   │   │   ├── AngleAxis.cs
│   │   │   │   ├── Axis.cs
│   │   │   │   ├── AxisChangeTypes.cs
│   │   │   │   ├── AxisChangedEventArgs.cs
│   │   │   │   ├── AxisLayer.cs
│   │   │   │   ├── AxisPosition.cs
│   │   │   │   ├── AxisUtilities.cs
│   │   │   │   ├── CategoryAxis.cs
│   │   │   │   ├── CategoryColorAxis.cs
│   │   │   │   ├── ColorAxisExtensions.cs
│   │   │   │   ├── DateTimeAxis.cs
│   │   │   │   ├── DateTimeIntervalType.cs
│   │   │   │   ├── IColorAxis.cs
│   │   │   │   ├── LinearAxis.cs
│   │   │   │   ├── LinearColorAxis.cs
│   │   │   │   ├── LogarithmicAxis.cs
│   │   │   │   ├── MagnitudeAxis.cs
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── RangeColorAxis.cs
│   │   │   │   ├── Rendering/
│   │   │   │   │   ├── AngleAxisRenderer.cs
│   │   │   │   │   ├── AxisRendererBase.cs
│   │   │   │   │   ├── HorizontalAndVerticalAxisRenderer.cs
│   │   │   │   │   └── MagnitudeAxisRenderer.cs
│   │   │   │   ├── TickStyle.cs
│   │   │   │   └── TimeSpanAxis.cs
│   │   │   ├── ClassDiagrams/
│   │   │   │   ├── Axes.cd
│   │   │   │   ├── PlotModel.cd
│   │   │   │   ├── Reporting.cd
│   │   │   │   └── Series.cd
│   │   │   ├── Foundation/
│   │   │   │   ├── CodeGenerator/
│   │   │   │   │   ├── CodeGenerationAttribute.cs
│   │   │   │   │   ├── CodeGenerator.cs
│   │   │   │   │   ├── CodeGeneratorStringExtensions.cs
│   │   │   │   │   └── ICodeGenerating.cs
│   │   │   │   ├── DataPoint.cs
│   │   │   │   ├── IDataPointProvider.cs
│   │   │   │   ├── IExporter.cs
│   │   │   │   ├── MarkerType.cs
│   │   │   │   ├── PlotLength.cs
│   │   │   │   └── PlotLengthUnit.cs
│   │   │   ├── Graphics/
│   │   │   │   ├── ControllerBase.cs
│   │   │   │   ├── ControllerExtensions.cs
│   │   │   │   ├── CursorType.cs
│   │   │   │   ├── DelegateViewCommand{T}.cs
│   │   │   │   ├── Element.cs
│   │   │   │   ├── ElementCollectionChangedEventArgs{T}.cs
│   │   │   │   ├── ElementCollection{T}.cs
│   │   │   │   ├── HitTestArguments.cs
│   │   │   │   ├── HitTestResult.cs
│   │   │   │   ├── IController.cs
│   │   │   │   ├── IView.cs
│   │   │   │   ├── IViewCommand.cs
│   │   │   │   ├── IViewCommand{T}.cs
│   │   │   │   ├── InputCommandBinding.cs
│   │   │   │   ├── ManipulatorBase.cs
│   │   │   │   ├── Model.MouseEvents.cs
│   │   │   │   ├── Model.cs
│   │   │   │   ├── SelectableElement.cs
│   │   │   │   ├── Selection.cs
│   │   │   │   ├── SelectionMode.cs
│   │   │   │   └── UIElement.cs
│   │   │   ├── Imaging/
│   │   │   │   ├── Bmp/
│   │   │   │   │   ├── BmpDecoder.cs
│   │   │   │   │   ├── BmpEncoder.cs
│   │   │   │   │   └── BmpEncoderOptions.cs
│   │   │   │   ├── Deflate/
│   │   │   │   │   ├── Arrays.cs
│   │   │   │   │   ├── BitReader.cs
│   │   │   │   │   ├── ByteBitReader.cs
│   │   │   │   │   ├── CanonicalCode.cs
│   │   │   │   │   ├── CircularDictionary.cs
│   │   │   │   │   ├── CodeTree.cs
│   │   │   │   │   ├── Deflate.cs
│   │   │   │   │   ├── InternalNode.cs
│   │   │   │   │   ├── Leaf.cs
│   │   │   │   │   ├── Node.cs
│   │   │   │   │   └── Readme.md
│   │   │   │   ├── IImageDecoder.cs
│   │   │   │   ├── IImageEncoder.cs
│   │   │   │   ├── ImageEncoderOptions.cs
│   │   │   │   ├── ImageFormat.cs
│   │   │   │   ├── Jpeg/
│   │   │   │   │   └── JpegDecoder.cs
│   │   │   │   ├── OxyImage.cs
│   │   │   │   ├── OxyImageInfo.cs
│   │   │   │   └── Png/
│   │   │   │       ├── PngDecoder.cs
│   │   │   │       ├── PngEncoder.cs
│   │   │   │       └── PngEncoderOptions.cs
│   │   │   ├── Input/
│   │   │   │   ├── Gestures/
│   │   │   │   │   ├── OxyInputGesture.cs
│   │   │   │   │   ├── OxyKeyGesture.cs
│   │   │   │   │   ├── OxyMouseDownGesture.cs
│   │   │   │   │   ├── OxyMouseEnterGesture.cs
│   │   │   │   │   ├── OxyMouseWheelGesture.cs
│   │   │   │   │   ├── OxyShakeGesture.cs
│   │   │   │   │   └── OxyTouchGesture.cs
│   │   │   │   ├── OxyKey.cs
│   │   │   │   ├── OxyModifierKeys.cs
│   │   │   │   └── OxyMouseButton.cs
│   │   │   ├── LibraryDoc.cs
│   │   │   ├── NamespaceDoc.cs
│   │   │   ├── OxyPlot.Core.nuspec
│   │   │   ├── OxyPlot.csproj
│   │   │   ├── OxyPlot.csproj.DotSettings
│   │   │   ├── OxyPlot.snk
│   │   │   ├── OxyPlot_NET.csproj
│   │   │   ├── OxyPlot_SL5.csproj
│   │   │   ├── Pdf/
│   │   │   │   ├── FontSubType.cs
│   │   │   │   ├── PdfExporter.cs
│   │   │   │   ├── PdfRenderContext.cs
│   │   │   │   ├── PdfWriter.cs
│   │   │   │   ├── PortableDocument.cs
│   │   │   │   ├── PortableDocumentExtensions.cs
│   │   │   │   ├── PortableDocumentFont.cs
│   │   │   │   ├── PortableDocumentFontFamily.cs
│   │   │   │   ├── PortableDocumentImage.cs
│   │   │   │   ├── PortableDocumentImageUtilities.cs
│   │   │   │   ├── ReadMe.txt
│   │   │   │   └── StandardFonts.cs
│   │   │   ├── PlotController/
│   │   │   │   ├── DelegatePlotCommand.cs
│   │   │   │   ├── EventArgs/
│   │   │   │   │   ├── OxyInputEventArgs.cs
│   │   │   │   │   ├── OxyKeyEventArgs.cs
│   │   │   │   │   ├── OxyMouseDownEventArgs.cs
│   │   │   │   │   ├── OxyMouseEventArgs.cs
│   │   │   │   │   ├── OxyMouseWheelEventArgs.cs
│   │   │   │   │   └── OxyTouchEventArgs.cs
│   │   │   │   ├── IPlotController.cs
│   │   │   │   ├── Manipulators/
│   │   │   │   │   ├── MouseManipulator.cs
│   │   │   │   │   ├── PanManipulator.cs
│   │   │   │   │   ├── PlotManipulator.cs
│   │   │   │   │   ├── TouchManipulator.cs
│   │   │   │   │   ├── TouchTrackerManipulator.cs
│   │   │   │   │   ├── TrackerHitResult.cs
│   │   │   │   │   ├── TrackerManipulator.cs
│   │   │   │   │   ├── ZoomRectangleManipulator.cs
│   │   │   │   │   └── ZoomStepManipulator.cs
│   │   │   │   ├── PlotCommands.cs
│   │   │   │   └── PlotController.cs
│   │   │   ├── PlotModel/
│   │   │   │   ├── IPlotElement.cs
│   │   │   │   ├── IPlotModel.cs
│   │   │   │   ├── PlotElement.cs
│   │   │   │   ├── PlotModel.Legends.cs
│   │   │   │   ├── PlotModel.Rendering.cs
│   │   │   │   ├── PlotModel.cs
│   │   │   │   └── TrackerEventArgs.cs
│   │   │   ├── PlotView/
│   │   │   │   └── IPlotView.cs
│   │   │   ├── Properties/
│   │   │   │   ├── AssemblyDescription.cs
│   │   │   │   └── AssemblyInfo.cs
│   │   │   ├── Rendering/
│   │   │   │   ├── FontWeights.cs
│   │   │   │   ├── HorizontalAlignment.cs
│   │   │   │   ├── LineJoin.cs
│   │   │   │   ├── LineStyle.cs
│   │   │   │   ├── LineStyleHelper.cs
│   │   │   │   ├── OxyColor.cs
│   │   │   │   ├── OxyColorExtensions.cs
│   │   │   │   ├── OxyColors.cs
│   │   │   │   ├── OxyPalette.cs
│   │   │   │   ├── OxyPalettes.cs
│   │   │   │   ├── OxyPen.cs
│   │   │   │   ├── OxyRect.cs
│   │   │   │   ├── OxySize.cs
│   │   │   │   ├── OxySizeExtensions.cs
│   │   │   │   ├── OxyThickness.cs
│   │   │   │   ├── RenderContext/
│   │   │   │   │   ├── IRenderContext.cs
│   │   │   │   │   ├── MathRenderingExtensions.cs
│   │   │   │   │   ├── RenderContextBase.cs
│   │   │   │   │   ├── RenderingExtensions.cs
│   │   │   │   │   └── XkcdRenderingDecorator.cs
│   │   │   │   ├── ScreenPoint.cs
│   │   │   │   ├── ScreenPointHelper.cs
│   │   │   │   ├── ScreenVector.cs
│   │   │   │   ├── Utilities/
│   │   │   │   │   ├── CanonicalSplineHelper.cs
│   │   │   │   │   ├── CohenSutherlandClipping.cs
│   │   │   │   │   ├── Decimator.cs
│   │   │   │   │   └── SutherlandHodgmanClipping.cs
│   │   │   │   └── VerticalAlignment.cs
│   │   │   ├── Reporting/
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── PlotModelExtensions.cs
│   │   │   │   ├── Report/
│   │   │   │   │   ├── Alignment.cs
│   │   │   │   │   ├── DrawingFigure.cs
│   │   │   │   │   ├── Equation.cs
│   │   │   │   │   ├── Figure.cs
│   │   │   │   │   ├── Header.cs
│   │   │   │   │   ├── HeaderHelper.cs
│   │   │   │   │   ├── Image.cs
│   │   │   │   │   ├── ItemsTable.cs
│   │   │   │   │   ├── ItemsTableField.cs
│   │   │   │   │   ├── Paragraph.cs
│   │   │   │   │   ├── ParagraphStyle.cs
│   │   │   │   │   ├── PlotFigure.cs
│   │   │   │   │   ├── PropertyTable.cs
│   │   │   │   │   ├── Report.cs
│   │   │   │   │   ├── ReportItem.cs
│   │   │   │   │   ├── ReportSection.cs
│   │   │   │   │   ├── ReportStyle.cs
│   │   │   │   │   ├── Table.cs
│   │   │   │   │   ├── TableCell.cs
│   │   │   │   │   ├── TableColumn.cs
│   │   │   │   │   ├── TableOfContents.cs
│   │   │   │   │   └── TableRow.cs
│   │   │   │   └── ReportWriters/
│   │   │   │       ├── HtmlReportWriter.cs
│   │   │   │       ├── IReportWriter.cs
│   │   │   │       ├── StringExtensions.cs
│   │   │   │       ├── TextReportWriter.cs
│   │   │   │       └── WikiReportWriter.cs
│   │   │   ├── Series/
│   │   │   │   ├── AreaSeries.cs
│   │   │   │   ├── BarSeries/
│   │   │   │   │   ├── BarItem.cs
│   │   │   │   │   ├── BarItemBase.cs
│   │   │   │   │   ├── BarSeries.cs
│   │   │   │   │   ├── BarSeriesBase.cs
│   │   │   │   │   ├── BarSeriesBase{T}.cs
│   │   │   │   │   ├── CategorizedItem.cs
│   │   │   │   │   ├── CategorizedSeries.cs
│   │   │   │   │   ├── ColumnItem.cs
│   │   │   │   │   ├── ColumnSeries.cs
│   │   │   │   │   ├── ErrorColumnItem.cs
│   │   │   │   │   ├── ErrorColumnSeries.cs
│   │   │   │   │   ├── IStackableSeries.cs
│   │   │   │   │   ├── IntervalBarItem.cs
│   │   │   │   │   ├── IntervalBarSeries.cs
│   │   │   │   │   ├── LabelPlacement.cs
│   │   │   │   │   ├── LinearBarSeries.cs
│   │   │   │   │   ├── RectangleBarItem.cs
│   │   │   │   │   ├── RectangleBarSeries.cs
│   │   │   │   │   ├── TornadoBarItem.cs
│   │   │   │   │   └── TornadoBarSeries.cs
│   │   │   │   ├── BoxPlotItem.cs
│   │   │   │   ├── BoxPlotSeries.cs
│   │   │   │   ├── ContourSeries.cs
│   │   │   │   ├── DataPointSeries.cs
│   │   │   │   ├── FinancialSeries/
│   │   │   │   │   ├── CandleStickAndVolumeSeries.cs
│   │   │   │   │   ├── CandleStickSeries.cs
│   │   │   │   │   ├── HighLowItem.cs
│   │   │   │   │   ├── HighLowSeries.cs
│   │   │   │   │   ├── OhlcvItem.cs
│   │   │   │   │   ├── OldCandleStickSeries.cs
│   │   │   │   │   ├── VolumeSeries.cs
│   │   │   │   │   └── VolumeStyle.cs
│   │   │   │   ├── FunctionSeries.cs
│   │   │   │   ├── HeatMapSeries.cs
│   │   │   │   ├── IScatterPointProvider.cs
│   │   │   │   ├── ITrackableSeries.cs
│   │   │   │   ├── ItemsSeries.cs
│   │   │   │   ├── LineLegendPosition.cs
│   │   │   │   ├── LineSeries.cs
│   │   │   │   ├── NamespaceDoc.cs
│   │   │   │   ├── PieSeries.cs
│   │   │   │   ├── PieSlice.cs
│   │   │   │   ├── ScatterErrorPoint.cs
│   │   │   │   ├── ScatterErrorSeries.cs
│   │   │   │   ├── ScatterPoint.cs
│   │   │   │   ├── ScatterSeries.cs
│   │   │   │   ├── ScatterSeries{T}.cs
│   │   │   │   ├── Series.cs
│   │   │   │   ├── StairStepSeries.cs
│   │   │   │   ├── StemSeries.cs
│   │   │   │   ├── ThreeColorLineSeries.cs
│   │   │   │   ├── TwoColorAreaSeries.cs
│   │   │   │   ├── TwoColorLineSeries.cs
│   │   │   │   └── XYAxisSeries.cs
│   │   │   ├── Svg/
│   │   │   │   ├── SvgExporter.cs
│   │   │   │   ├── SvgRenderContext.cs
│   │   │   │   └── SvgWriter.cs
│   │   │   └── Utilities/
│   │   │       ├── ArrayBuilder.cs
│   │   │       ├── ArrayExtensions.cs
│   │   │       ├── BinaryReaderExtensions.cs
│   │   │       ├── ComparerHelper.cs
│   │   │       ├── Conrec.cs
│   │   │       ├── FractionHelper.cs
│   │   │       ├── HashCodeBuilder.cs
│   │   │       ├── ListBuilder{T}.cs
│   │   │       ├── ReflectionPath.cs
│   │   │       ├── StreamExtensions.cs
│   │   │       ├── StringHelper.cs
│   │   │       ├── TypeExtensions.cs
│   │   │       └── XmlWriterBase.cs
│   │   ├── OxyPlot.Wpf/
│   │   │   ├── Annotations/
│   │   │   │   ├── Annotation.cs
│   │   │   │   ├── ArrowAnnotation.cs
│   │   │   │   ├── EllipseAnnotation.cs
│   │   │   │   ├── FunctionAnnotation.cs
│   │   │   │   ├── LineAnnotation.cs
│   │   │   │   ├── PathAnnotation.cs
│   │   │   │   ├── PointAnnotation.cs
│   │   │   │   ├── PolygonAnnotation.cs
│   │   │   │   ├── PolylineAnnotation.cs
│   │   │   │   ├── RectangleAnnotation.cs
│   │   │   │   ├── ShapeAnnotation.cs
│   │   │   │   ├── TextAnnotation.cs
│   │   │   │   └── TextualAnnotation.cs
│   │   │   ├── Axes/
│   │   │   │   ├── AngleAxis.cs
│   │   │   │   ├── Axis.cs
│   │   │   │   ├── CategoryAxis.cs
│   │   │   │   ├── DateTimeAxis.cs
│   │   │   │   ├── LinearAxis.cs
│   │   │   │   ├── LinearColorAxis.cs
│   │   │   │   ├── LogarithmicAxis.cs
│   │   │   │   ├── MagnitudeAxis.cs
│   │   │   │   └── TimeSpanAxis.cs
│   │   │   ├── CanvasRenderContext.cs
│   │   │   ├── Converters/
│   │   │   │   ├── OxyColorConverter.cs
│   │   │   │   └── ThicknessConverter.cs
│   │   │   ├── ExporterExtensions.cs
│   │   │   ├── Extensions/
│   │   │   │   └── DataPointExtension.cs
│   │   │   ├── MoreColors.cs
│   │   │   ├── NamespaceDoc.cs
│   │   │   ├── OxyPlot.Wpf.csproj
│   │   │   ├── OxyPlot.Wpf.csproj.DotSettings
│   │   │   ├── OxyPlot.Wpf.nuspec
│   │   │   ├── OxyPlot.Wpf.snk
│   │   │   ├── OxyPlot.Wpf_NET.csproj
│   │   │   ├── OxyPlot.Wpf_NET40.csproj.DotSettings
│   │   │   ├── Plot.Properties.cs
│   │   │   ├── Plot.cs
│   │   │   ├── PlotBase.Events.cs
│   │   │   ├── PlotBase.Export.cs
│   │   │   ├── PlotBase.Properties.cs
│   │   │   ├── PlotBase.cs
│   │   │   ├── PlotCommands.cs
│   │   │   ├── PlotView.cs
│   │   │   ├── PngExporter.cs
│   │   │   ├── Properties/
│   │   │   │   ├── AssemblyDescription.cs
│   │   │   │   ├── AssemblyInfo.cs
│   │   │   │   ├── Resources.Designer.cs
│   │   │   │   ├── Resources.resx
│   │   │   │   ├── Settings.Designer.cs
│   │   │   │   └── Settings.settings
│   │   │   ├── Reporting/
│   │   │   │   └── FlowDocumentReportWriter.cs
│   │   │   ├── Series/
│   │   │   │   ├── AreaSeries.cs
│   │   │   │   ├── BarSeries/
│   │   │   │   │   ├── BarSeries.cs
│   │   │   │   │   ├── BarSeriesBase.cs
│   │   │   │   │   ├── BarSeriesBase{T}.cs
│   │   │   │   │   ├── CategorizedSeries.cs
│   │   │   │   │   ├── ColumnSeries.cs
│   │   │   │   │   └── LinearBarSeries.cs
│   │   │   │   ├── BoxPlotSeries.cs
│   │   │   │   ├── DataPointSeries.cs
│   │   │   │   ├── HeatMapSeries.cs
│   │   │   │   ├── ItemsSeries.cs
│   │   │   │   ├── LineSeries.cs
│   │   │   │   ├── PieSeries.cs
│   │   │   │   ├── ScatterErrorSeries.cs
│   │   │   │   ├── ScatterSeries.cs
│   │   │   │   ├── ScatterSeries{T}.cs
│   │   │   │   ├── Series.cs
│   │   │   │   ├── StairStepSeries.cs
│   │   │   │   ├── ThreeColorLineSeries.cs
│   │   │   │   ├── TwoColorAreaSeries.cs
│   │   │   │   ├── TwoColorLineSeries.cs
│   │   │   │   └── XYAxisSeries.cs
│   │   │   ├── SvgExporter.cs
│   │   │   ├── TextMeasurementMethod.cs
│   │   │   ├── Themes/
│   │   │   │   └── Generic.xaml
│   │   │   ├── Tracker/
│   │   │   │   ├── TrackerControl.cs
│   │   │   │   └── TrackerDefinition.cs
│   │   │   ├── Utilities/
│   │   │   │   ├── ConverterExtensions.cs
│   │   │   │   └── Keyboard.cs
│   │   │   ├── XamlExporter.cs
│   │   │   └── XpsExporter.cs
│   │   └── WpfView/
│   │       ├── AngularGauge.cs
│   │       ├── AngularSection.cs
│   │       ├── AxesCollection.cs
│   │       ├── Axis.cs
│   │       ├── AxisSection.cs
│   │       ├── AxisWindowCollection.cs
│   │       ├── CandleSeries.cs
│   │       ├── CartesianChart.cs
│   │       ├── Charts/
│   │       │   └── Base/
│   │       │       └── Chart.cs
│   │       ├── ColorsCollection.cs
│   │       ├── ColumnSeries.cs
│   │       ├── Components/
│   │       │   ├── AxisSeparatorElement.cs
│   │       │   ├── ChartUpdater.cs
│   │       │   ├── Converters.cs
│   │       │   ├── DefaultXamlReader.cs
│   │       │   ├── IFondeable.cs
│   │       │   ├── ThreadAccess.cs
│   │       │   └── TooltipDto.cs
│   │       ├── Converters/
│   │       │   └── TypeConverters.cs
│   │       ├── DateAxis.cs
│   │       ├── DefaultAxes.cs
│   │       ├── DefaultGeoMapTooltip.xaml
│   │       ├── DefaultGeoMapTooltip.xaml.cs
│   │       ├── DefaultGeometry.cs
│   │       ├── DefaultLegend.xaml
│   │       ├── DefaultLegend.xaml.cs
│   │       ├── DefaultTooltip.xaml
│   │       ├── DefaultTooltip.xaml.cs
│   │       ├── Desktop.csproj.DotSettings
│   │       ├── Extentions.cs
│   │       ├── FinancialColoringRule.cs
│   │       ├── Gauge.cs
│   │       ├── GeoMap.cs
│   │       ├── HeatColorRange.xaml
│   │       ├── HeatColorRange.xaml.cs
│   │       ├── HeatSeries.cs
│   │       ├── IChartLegend.cs
│   │       ├── IChartTooltip.cs
│   │       ├── LineSegmentSplitter.cs
│   │       ├── LineSeries.cs
│   │       ├── LiveChartsDesktop.csproj.DotSettings
│   │       ├── LiveChartsWPF.csproj.DotSettings
│   │       ├── LogarithmicAxis.cs
│   │       ├── Maps/
│   │       │   └── MapResolver.cs
│   │       ├── OhlcSeries.cs
│   │       ├── PieChart.cs
│   │       ├── PieSeries.cs
│   │       ├── Points/
│   │       │   ├── CandlePointView.cs
│   │       │   ├── ColumnPointView.cs
│   │       │   ├── HeatPoint.cs
│   │       │   ├── HorizontalBezierPointView.cs
│   │       │   ├── OhlcPointView.cs
│   │       │   ├── PiePointView.cs
│   │       │   ├── PieSlice.cs
│   │       │   ├── PointView.cs
│   │       │   ├── RowPointView.cs
│   │       │   ├── ScatterPointView.cs
│   │       │   ├── StepLinePointView.cs
│   │       │   └── VerticalBezierPointView.cs
│   │       ├── Properties/
│   │       │   ├── AssemblyInfo.cs
│   │       │   ├── Resources.Designer.cs
│   │       │   ├── Resources.resx
│   │       │   ├── Settings.Designer.cs
│   │       │   └── Settings.settings
│   │       ├── RowSeries.cs
│   │       ├── ScatterSeries.cs
│   │       ├── SectionsCollection.cs
│   │       ├── Separator.cs
│   │       ├── Series.cs
│   │       ├── StackedAreaSeries.cs
│   │       ├── StackedColumnSeries.cs
│   │       ├── StackedRowSeries.cs
│   │       ├── StepLineSeries.cs
│   │       ├── Themes/
│   │       │   ├── Colors/
│   │       │   │   ├── black.xaml
│   │       │   │   ├── blue.xaml
│   │       │   │   ├── material.xaml
│   │       │   │   ├── metro.xaml
│   │       │   │   └── white.xaml
│   │       │   ├── Size/
│   │       │   │   ├── l.xaml
│   │       │   │   ├── m.xaml
│   │       │   │   └── s.xaml
│   │       │   ├── Weight/
│   │       │   │   ├── bold.xaml
│   │       │   │   ├── light.xaml
│   │       │   │   └── normal.xaml
│   │       │   └── base.xaml
│   │       ├── VerticalLineSeries.cs
│   │       ├── VerticalStackedAreaSeries.cs
│   │       ├── VisualElement.cs
│   │       ├── WindowAxis.cs
│   │       ├── WpfView.csproj
│   │       ├── WpfView.csproj.DotSettings
│   │       ├── WpfView.nuspec
│   │       ├── app.config
│   │       ├── docs.xml
│   │       ├── install.ps1
│   │       └── wpf.docs
│   ├── CapFrameX.Configuration/
│   │   ├── AppDependencyChecker.cs
│   │   ├── CapFrameX.Configuration.csproj
│   │   ├── CapFrameXConfiguration.cs
│   │   ├── ConfigurationProvider.cs
│   │   ├── EtwServiceChecker.cs
│   │   ├── ISettingsStorage.cs
│   │   ├── JsonSettingsStorage.cs
│   │   ├── PathService.cs
│   │   ├── PathServiceProvider.cs
│   │   ├── PortableConfig.cs
│   │   ├── PortableModeDetector.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Constants/
│   │   └── CapFrameX.Constants.csproj
│   ├── CapFrameX.Contracts/
│   │   ├── Aggregation/
│   │   │   └── IAggregationEntry.cs
│   │   ├── CapFrameX.Contracts.csproj
│   │   ├── Cloud/
│   │   │   └── ICloudEntry.cs
│   │   ├── Configuration/
│   │   │   ├── EDownSamplingMode.cs
│   │   │   ├── IAppConfiguration.cs
│   │   │   ├── IPathService.cs
│   │   │   └── IPmdServiceConfiguration.cs
│   │   ├── Data/
│   │   │   ├── ESystemInfoTertiaryStatus.cs
│   │   │   ├── IAppVersionProvider.cs
│   │   │   ├── ICloudManager.cs
│   │   │   ├── IFileRecordInfo.cs
│   │   │   ├── IRecordManager.cs
│   │   │   ├── ISystemInfo.cs
│   │   │   ├── ISystemInfoEntry.cs
│   │   │   └── IWebVersionProvider.cs
│   │   ├── Logging/
│   │   │   ├── ELogMessageType.cs
│   │   │   ├── ILogEntry.cs
│   │   │   └── ILogEntryManager.cs
│   │   ├── MVVM/
│   │   │   ├── IMouseEventHandler.cs
│   │   │   └── IShell.cs
│   │   ├── Overlay/
│   │   │   ├── EOverlayEntryConfig.cs
│   │   │   ├── EOverlayEntryType.cs
│   │   │   ├── EOverlayTemplate.cs
│   │   │   ├── IOverlayEntry.cs
│   │   │   ├── IOverlayEntryCore.cs
│   │   │   ├── IOverlayEntryFormatChange.cs
│   │   │   ├── IOverlayEntryProvider.cs
│   │   │   ├── IOverlayService.cs
│   │   │   └── IOverlayTemplateService.cs
│   │   ├── PMD/
│   │   │   └── EPmdDriverStatus.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── RTSS/
│   │   │   └── IRTSSService.cs
│   │   ├── Sensor/
│   │   │   ├── EHardwareType.cs
│   │   │   ├── IPmcReaderSensorPlugin.cs
│   │   │   ├── ISensorEntry.cs
│   │   │   ├── ISensorEntryProvider.cs
│   │   │   ├── ISensorService.cs
│   │   │   └── SensorIdentifierHelper.cs
│   │   ├── UpdateCheck/
│   │   │   └── IUpdateCheck.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.CustomInstallerActions/
│   │   ├── CapFrameX.CustomInstallerActions.csproj
│   │   ├── CustomAction.config
│   │   ├── InstallerCustomActions.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── packages.config
│   ├── CapFrameX.Data/
│   │   ├── AggregationEntry.cs
│   │   ├── AppVersionProvider.cs
│   │   ├── ApplicationState.cs
│   │   ├── AtomicTime.cs
│   │   ├── CapFrameX.Data.csproj
│   │   ├── CaptureManager.cs
│   │   ├── CloudEntry.cs
│   │   ├── CloudManager.cs
│   │   ├── ComparisonRecordInfo.cs
│   │   ├── ECaptureFileMode.cs
│   │   ├── EHardwareInfoSource.cs
│   │   ├── FileRecordInfo.cs
│   │   ├── IRecordDataServer.cs
│   │   ├── ImageExport.cs
│   │   ├── LocalRecordDataServer.cs
│   │   ├── Logging/
│   │   │   ├── LogEntry.cs
│   │   │   └── LogEntryManager.cs
│   │   ├── LoginManager.cs
│   │   ├── OverlayEntryFormatChange.cs
│   │   ├── ProcessList/
│   │   │   └── Processes.json
│   │   ├── ProcessList.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── RecordDirectoryObserver.cs
│   │   ├── RecordManager.cs
│   │   ├── ReportInfo.cs
│   │   ├── SortKeyComparer.cs
│   │   ├── SoundManager.cs
│   │   ├── SystemInfoEntry.cs
│   │   ├── WebVersionProvider.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Data.Session/
│   │   ├── CapFrameX.Data.Session.csproj
│   │   ├── Classes/
│   │   │   ├── EPresentMode.cs
│   │   │   ├── Session.cs
│   │   │   ├── SessionCaptureData.cs
│   │   │   ├── SessionInfo.cs
│   │   │   ├── SessionRun.cs
│   │   │   ├── SessionSensorData.cs
│   │   │   └── SessionSensorData2.cs
│   │   ├── Contracts/
│   │   │   ├── ISession.cs
│   │   │   ├── ISessionCaptureData.cs
│   │   │   ├── ISessionInfo.cs
│   │   │   ├── ISessionRun.cs
│   │   │   ├── ISessionSensorData.cs
│   │   │   ├── ISessionSensorData2.cs
│   │   │   └── ISessionSensorEntry.cs
│   │   └── Converters/
│   │       ├── BoolToZeroOrOneConverter.cs
│   │       ├── ConcreteTypeConverter.cs
│   │       ├── SessionSensorData2TypeConverter.cs
│   │       ├── SessionSensorDataConverter.cs
│   │       └── VersionConverter.cs
│   ├── CapFrameX.EventAggregation/
│   │   ├── CapFrameX.EventAggregation.csproj
│   │   ├── Messages/
│   │   │   ├── AppMessages.cs
│   │   │   └── ViewMessages.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   └── app.config
│   ├── CapFrameX.Extensions/
│   │   ├── CapFrameX.Extensions.csproj
│   │   ├── CollectionExtensions.cs
│   │   ├── Comparer.cs
│   │   ├── ContainerExtensions.cs
│   │   ├── HttpRequestHeadersExtensions.cs
│   │   ├── LinqExtensions.cs
│   │   ├── ObjectCopier.cs
│   │   ├── ObjectExtensions.cs
│   │   ├── ObservableCollectionExtensions.cs
│   │   ├── ObservableExtensions.cs
│   │   ├── ProcessHelper.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── ReflectionExtensions.cs
│   │   ├── StringExtensions.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Extensions.NetStandard/
│   │   ├── Attributes/
│   │   │   └── ShortDescriptionAttribute.cs
│   │   ├── CapFrameX.Extensions.NetStandard.csproj
│   │   ├── EnumExtensions.cs
│   │   └── JTokenExtensions.cs
│   ├── CapFrameX.Hardware.Controller/
│   │   ├── CapFrameX.Hardware.Controller.csproj
│   │   ├── IThreadAffinityController.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── ThreadAffinityController.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Hotkey/
│   │   ├── CXHotkey.cs
│   │   ├── CXHotkeyCombination.cs
│   │   ├── CapFrameX.Hotkey.csproj
│   │   ├── Chord.cs
│   │   ├── HotkeyDictionaryBuilder.cs
│   │   ├── KeyCombinationExtensions.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Hwinfo/
│   │   ├── CapFrameX.Hwinfo.vcxproj
│   │   ├── CapFrameX.Hwinfo.vcxproj.filters
│   │   ├── TimeStampCounterFrequency.cpp
│   │   ├── TimeStampCounterFrequency.h
│   │   ├── cApiWrapper.cpp
│   │   ├── cApiWrapper.h
│   │   ├── dllmain.cpp
│   │   ├── framework.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CapFrameX.IGCL/
│   │   ├── CapFrameX.IGCL.vcxproj
│   │   ├── CapFrameX.IGCL.vcxproj.filters
│   │   ├── IGCLManager.cpp
│   │   ├── IGCLManager.h
│   │   ├── cApiWrapper.cpp
│   │   ├── cApiWrapper.h
│   │   ├── dllmain.cpp
│   │   ├── framework.h
│   │   ├── igcl_api.h
│   │   ├── pch.cpp
│   │   └── pch.h
│   ├── CapFrameX.InterprocessCommunication/
│   │   ├── CapFrameX.InterprocessCommunication.csproj
│   │   ├── Constants.cs
│   │   ├── Contracts/
│   │   │   ├── IReceiver.cs
│   │   │   └── ISender.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── Receiver.cs
│   │   ├── Sender.cs
│   │   ├── StreamString.cs
│   │   └── packages.config
│   ├── CapFrameX.MVVM/
│   │   ├── AttachedProperties/
│   │   │   └── MouseHelper.cs
│   │   ├── BindingProxy.cs
│   │   ├── CapFrameX.MVVM.csproj
│   │   ├── Converter/
│   │   │   ├── AddSubsctractConverter.cs
│   │   │   ├── AddValueConverter.cs
│   │   │   ├── BoolToVisibilityConverter.cs
│   │   │   ├── EnumDescriptionConverter.cs
│   │   │   ├── EnumShortDescriptionConverter.cs
│   │   │   ├── InequalityToValueConverter.cs
│   │   │   ├── InvertBoolConverter.cs
│   │   │   ├── ModeColorConverter.cs
│   │   │   ├── ModeDescriptionConverter.cs
│   │   │   ├── NegateBoolConverter.cs
│   │   │   ├── PlusHalfDifferenceConverter.cs
│   │   │   ├── PmdStatusColorConverter.cs
│   │   │   ├── SelectedAreaWidthRatioConverter.cs
│   │   │   ├── StringColorConverter.cs
│   │   │   └── ZoomingModeConverter.cs
│   │   ├── Dialogs/
│   │   │   ├── ConditionalMessageDialog.xaml
│   │   │   ├── ConditionalMessageDialog.xaml.cs
│   │   │   ├── CreateFolderDialog.xaml
│   │   │   ├── CreateFolderDialog.xaml.cs
│   │   │   ├── EditingDialog.xaml
│   │   │   ├── EditingDialog.xaml.cs
│   │   │   ├── MessageDialog.xaml
│   │   │   ├── MessageDialog.xaml.cs
│   │   │   ├── ResetOverlayConfigDialog.xaml
│   │   │   └── ResetOverlayConfigDialog.xaml.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SelectionChangedBehaviour.cs
│   │   ├── SetPropertyAction.cs
│   │   ├── SliderValueChangedBehaviour.cs
│   │   ├── Validation/
│   │   │   ├── HotkeyValidationRule.cs
│   │   │   ├── IntegerValidationRule.cs
│   │   │   └── NotEmptyValidationRule.cs
│   │   ├── WpfExtensions.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Mcp/
│   │   ├── Attributes/
│   │   │   ├── McpServerToolAttribute.cs
│   │   │   └── McpServerToolTypeAttribute.cs
│   │   ├── CapFrameX.Mcp.csproj
│   │   ├── McpModule.cs
│   │   ├── Protocol/
│   │   │   ├── InitializeResult.cs
│   │   │   ├── JsonRpcMessages.cs
│   │   │   ├── McpProtocol.cs
│   │   │   └── ToolMessages.cs
│   │   ├── Schema/
│   │   │   └── JsonSchemaBuilder.cs
│   │   └── Tools/
│   │       ├── BottleneckTools.cs
│   │       ├── CaptureStatusTools.cs
│   │       ├── CaptureTimelineTools.cs
│   │       ├── ComparisonTools.cs
│   │       ├── DiagnosticsTools.cs
│   │       ├── Dtos.cs
│   │       ├── LogReader.cs
│   │       ├── McpToolDescriptor.cs
│   │       ├── McpToolRegistry.cs
│   │       ├── MetricsTools.cs
│   │       ├── PingTools.cs
│   │       ├── RecordTools.cs
│   │       ├── SearchTools.cs
│   │       ├── SensorTools.cs
│   │       └── SystemInfoTools.cs
│   ├── CapFrameX.Monitoring.Contracts/
│   │   ├── CapFrameX.Monitoring.Contracts.csproj
│   │   ├── IProcessService.cs
│   │   ├── ISensorConfig.cs
│   │   ├── ProcessServiceProvider.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Overlay/
│   │   ├── CapFrameX.Overlay.csproj
│   │   ├── EOutlierHandling.cs
│   │   ├── OverlayEntryCore.cs
│   │   ├── OverlayEntryPersistence.cs
│   │   ├── OverlayEntryProvider.cs
│   │   ├── OverlayEntryWrapper.cs
│   │   ├── OverlayService.cs
│   │   ├── OverlayTemplateService.cs
│   │   ├── OverlayUtils.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.PMD/
│   │   ├── Benchlab/
│   │   │   ├── BenchlabMetricsManager.cs
│   │   │   ├── BenchlabService.cs
│   │   │   ├── IBenchlabService.cs
│   │   │   └── Sensor.cs
│   │   ├── CapFrameX.PMD.csproj
│   │   ├── PmdAnalysisChartManager.cs
│   │   ├── PmdMetricSet.cs
│   │   ├── Powenetics/
│   │   │   ├── IPoweneticsDriver.cs
│   │   │   ├── IPoweneticsService.cs
│   │   │   ├── PoweneticsChannel.cs
│   │   │   ├── PoweneticsChannelType.cs
│   │   │   ├── PoweneticsData.cs
│   │   │   ├── PoweneticsDataProcessing.cs
│   │   │   ├── PoweneticsMetricsManager.cs
│   │   │   ├── PoweneticsService.cs
│   │   │   └── PoweneticsUSBDriver.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.PresentMonInterface/
│   │   ├── CapFrameX.PresentMonInterface.csproj
│   │   ├── CaptureServiceConfiguration.cs
│   │   ├── CaptureServiceInfo.cs
│   │   ├── IOnlineMetricService.cs
│   │   ├── OnlineMetricService.cs
│   │   ├── OnlinePmdMetrics.cs
│   │   ├── PresentMon/
│   │   │   └── license.txt
│   │   ├── PresentMonCaptureService.cs
│   │   ├── PresentMonServiceConfiguration.cs
│   │   ├── PresentMonStartInfo.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.RTSSIntegration/
│   │   ├── CapFrameX.RTSSIntegration.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── RTSSService.cs
│   │   ├── RefreshTray.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.RTSSInterface/
│   │   ├── CapFrameX.RTSSInterface.cpp
│   │   ├── CapFrameX.RTSSInterface.vcxproj
│   │   ├── CapFrameX.RTSSInterface.vcxproj.filters
│   │   ├── GroupedString.cpp
│   │   ├── GroupedString.h
│   │   ├── Include/
│   │   │   ├── EncoderPluginTypes.h
│   │   │   ├── RTSSHooksTypes.h
│   │   │   └── RTSSSharedMemory.h
│   │   ├── OverlayEntry.cpp
│   │   ├── OverlayEntry.h
│   │   ├── RTSSCSharpWrapper.cpp
│   │   ├── RTSSCSharpWrapper.h
│   │   ├── RTSSCoreControl.cpp
│   │   ├── RTSSCoreControl.h
│   │   ├── RTSSHooksInterface.cpp
│   │   ├── RTSSHooksInterface.h
│   │   ├── RTSSProfileInterface.cpp
│   │   ├── RTSSProfileInterface.h
│   │   ├── dllmain.cpp
│   │   ├── stdafx.cpp
│   │   ├── stdafx.h
│   │   └── targetver.h
│   ├── CapFrameX.Sensor/
│   │   ├── CapFrameX.Sensor.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SensorConfig.cs
│   │   ├── SensorEntry.cs
│   │   ├── SensorEntryProvider.cs
│   │   ├── SensorEntryWrapper.cs
│   │   ├── SensorService.cs
│   │   ├── SessionSensorDataLive.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Sensor.Reporting/
│   │   ├── CapFrameX.Sensor.Reporting.csproj
│   │   ├── Contracts/
│   │   │   └── ISensorReportItem.cs
│   │   ├── Data/
│   │   │   └── SensorReportItem.cs
│   │   ├── EReportSensorName.cs
│   │   └── SensorReport.cs
│   ├── CapFrameX.Statistics.NetStandard/
│   │   ├── CapFrameX.Statistics.NetStandard.csproj
│   │   ├── CircularBuffer.cs
│   │   ├── Contracts/
│   │   │   ├── EFilterMode.cs
│   │   │   ├── EInputLagType.cs
│   │   │   ├── ELShapeMetrics.cs
│   │   │   ├── EMetric.cs
│   │   │   ├── ERemoveOutlierMethod.cs
│   │   │   ├── IFrameTimeAnalyzer.cs
│   │   │   ├── IFrametimeStatisticProviderOptions.cs
│   │   │   ├── IMetricAnalysis.cs
│   │   │   └── IStatisticProvider.cs
│   │   ├── FrametimeAnalyzer.cs
│   │   ├── FrametimeStatisticProvider.cs
│   │   ├── IntervalTimeAverageFilter.cs
│   │   ├── MetricAnalysis.cs
│   │   ├── Point.cs
│   │   ├── SampleBasedMovingAverage.cs
│   │   ├── SavitzkyGolayFilter.cs
│   │   ├── SessionExtensions.cs
│   │   └── TimeBasedMovingAverage.cs
│   ├── CapFrameX.Statistics.PlotBuilder/
│   │   ├── CapFrameX.Statistics.PlotBuilder.csproj
│   │   ├── Constants.cs
│   │   ├── Contracts/
│   │   │   ├── EPlotAxis.cs
│   │   │   └── IPlotSettings.cs
│   │   ├── FpsGraphPlotBuilder.cs
│   │   ├── FrametimeDistributionPlotBuilder.cs
│   │   ├── FrametimePlotBuilder.cs
│   │   ├── LineSeries.cs
│   │   └── PlotBuilder.cs
│   ├── CapFrameX.SystemInfo.NetStandard/
│   │   ├── CapFrameX.SystemInfo.NetStandard.csproj
│   │   └── SystemInfo.cs
│   ├── CapFrameX.Test/
│   │   ├── CapFrameX.Test.csproj
│   │   ├── Data/
│   │   │   ├── CaptureManagerTest.cs
│   │   │   └── FileRecordInfoTest.cs
│   │   ├── Extensions/
│   │   │   ├── ObservableExtensionsTest.cs
│   │   │   └── StringExtensionsTest.cs
│   │   ├── Integration/
│   │   │   └── PresentMonIntegrationTest.cs
│   │   ├── Mocks/
│   │   │   ├── MockBenchlabService.cs
│   │   │   ├── MockCaptureService.cs
│   │   │   ├── MockPoweneticsService.cs
│   │   │   ├── MockRecordManager.cs
│   │   │   └── MockSensorService.cs
│   │   ├── PMD/
│   │   │   └── OfflineDataProcessingTest.cs
│   │   ├── PresentMonInterface/
│   │   │   └── SystemInfoTest.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── Sensor/
│   │   │   ├── ComputerTest.cs
│   │   │   ├── OverlayConfigIntelIntel.json
│   │   │   ├── OverlayConfigMigrationIntelIntelTest.cs
│   │   │   ├── OverlayConfigMigrationNvAmdTest.cs
│   │   │   ├── OverlayConfigMigrationNvMobileIntelTest.cs
│   │   │   ├── OverlayConfigMigrationNvMobileIntelTest.json
│   │   │   ├── OverlayConfigNvAmd.json
│   │   │   ├── PantherLakeVoltageTest.cs
│   │   │   ├── SensorAggregationStableIdTest.cs
│   │   │   └── StableIdMigrationTest.cs
│   │   ├── Statistics/
│   │   │   ├── CircularBufferTest.cs
│   │   │   └── FrametimeStatisticProviderTest.cs
│   │   ├── TestHelper.cs
│   │   ├── TestRecordFiles/
│   │   │   ├── CapFrameXFileWithHeader.csv
│   │   │   ├── CustomFilenameWithoutComment.csv
│   │   │   ├── CustomFilenameWithoutMetaDataInFilename.csv
│   │   │   ├── InvalidColumnFile.csv
│   │   │   ├── OCAT-MetroExodus.exe-2019-02-20T101522.csv
│   │   │   ├── PresentMonTestOutputFilename.csv
│   │   │   └── ShortFile.csv
│   │   ├── Updater/
│   │   │   └── UpdateCheckTest.cs
│   │   ├── ViewModel/
│   │   │   └── CaptureViewModelTest.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.Updater/
│   │   ├── CapFrameX.Updater.csproj
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── UpdateCheck.cs
│   │   └── app.config
│   ├── CapFrameX.View/
│   │   ├── AggregationView.xaml
│   │   ├── AggregationView.xaml.cs
│   │   ├── CapFrameX.View.csproj
│   │   ├── CaptureView.xaml
│   │   ├── CaptureView.xaml.cs
│   │   ├── CloudView.xaml
│   │   ├── CloudView.xaml.cs
│   │   ├── CollectionViewUtils.cs
│   │   ├── ColorbarView.xaml
│   │   ├── ColorbarView.xaml.cs
│   │   ├── ComparisonDataView.xaml
│   │   ├── ComparisonDataView.xaml.cs
│   │   ├── ComparisonView.xaml
│   │   ├── ComparisonView.xaml.cs
│   │   ├── ControlView.xaml
│   │   ├── ControlView.xaml.cs
│   │   ├── Controls/
│   │   │   ├── CXColorPicker.cs
│   │   │   ├── CustomPanManipulator.cs
│   │   │   ├── CustomRangeSlider.cs
│   │   │   ├── CustomZoomStepManipulator.cs
│   │   │   ├── EAxisDescription.cs
│   │   │   ├── FpsGraphControl.xaml
│   │   │   ├── FpsGraphControl.xaml.cs
│   │   │   ├── FrametimeDistributionGraphControl.xaml
│   │   │   ├── FrametimeDistributionGraphControl.xaml.cs
│   │   │   ├── FrametimeGraphControl.xaml
│   │   │   ├── FrametimeGraphControl.xaml.cs
│   │   │   ├── MarkupTextBlock.cs
│   │   │   ├── MultiSelectionDataGrid.cs
│   │   │   └── PlotViewCustomZoom.cs
│   │   ├── DataView.xaml
│   │   ├── DataView.xaml.cs
│   │   ├── OverlayView.xaml
│   │   ├── OverlayView.xaml.cs
│   │   ├── PmdView.xaml
│   │   ├── PmdView.xaml.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   ├── Resources.Designer.cs
│   │   │   └── Resources.resx
│   │   ├── ReportView.xaml
│   │   ├── ReportView.xaml.cs
│   │   ├── SensorView.xaml
│   │   ├── SensorView.xaml.cs
│   │   ├── StateView.xaml
│   │   ├── StateView.xaml.cs
│   │   ├── Styles/
│   │   │   └── CustomRangeSliderStyle.xaml
│   │   ├── SynchronizationView.xaml
│   │   ├── SynchronizationView.xaml.cs
│   │   ├── Themes/
│   │   │   ├── DarkTheme.cs
│   │   │   └── LightTheme.cs
│   │   ├── UITracker/
│   │   │   ├── ColumnWidthTracker.cs
│   │   │   └── RowHeightTracker.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.ViewModel/
│   │   ├── AggregationViewModel.cs
│   │   ├── CapFrameX.ViewModel.csproj
│   │   ├── CaptureViewModel.cs
│   │   ├── CloudViewModel.cs
│   │   ├── ColorRessource.cs
│   │   ├── ColorbarViewModel.cs
│   │   ├── ComparisonColorManager.cs
│   │   ├── ComparisonDataViewModel.cs
│   │   ├── ComparisonRecordInfoWrapper.cs
│   │   ├── ComparisonViewModel.cs
│   │   ├── ComparisonViewModelItems.cs
│   │   ├── ComparisonViewModelLabel.cs
│   │   ├── ControlViewModel.cs
│   │   ├── DataContext/
│   │   │   ├── FpsGraphDataContext.cs
│   │   │   ├── FrametimeDistributionGraphDataContext.cs
│   │   │   ├── FrametimeGraphDataContext.cs
│   │   │   └── GraphDataContextBase.cs
│   │   ├── DataThresholdViewModel.cs
│   │   ├── DataViewModel.cs
│   │   ├── DataViewModelParameterSettings.cs
│   │   ├── EChartYAxisSetting.cs
│   │   ├── EComparisonContext.cs
│   │   ├── OverlayViewModel.cs
│   │   ├── PmdViewModel.cs
│   │   ├── Properties/
│   │   │   ├── AssemblyInfo.cs
│   │   │   └── packages.config
│   │   ├── ReportViewModel.cs
│   │   ├── ReportViewModelParameterSettings.cs
│   │   ├── SensorViewModel.cs
│   │   ├── StateViewModel.cs
│   │   ├── StateViewModelSystemStatus.cs
│   │   ├── SubModels/
│   │   │   ├── BenchlabViewModel.cs
│   │   │   ├── ComparisonColorItems.cs
│   │   │   ├── OverlayGroupControl.cs
│   │   │   ├── OverlayGroupSeparating.cs
│   │   │   ├── PmdViewModelBase.cs
│   │   │   ├── PoweneticsViewModel.cs
│   │   │   └── SensorGroupControl.cs
│   │   ├── SynchronizationViewModel.cs
│   │   ├── app.config
│   │   └── packages.config
│   ├── CapFrameX.VoltageMonitor/
│   │   ├── App.xaml
│   │   ├── App.xaml.cs
│   │   ├── CapFrameX.VoltageMonitor.csproj
│   │   ├── MainWindow.xaml
│   │   └── MainWindow.xaml.cs
│   ├── CapFrameX.Webservice.Data/
│   │   ├── CapFrameX.Webservice.Data.csproj
│   │   ├── Commands/
│   │   │   ├── AddProcessCommand.cs
│   │   │   ├── DeleteSessionCollectionByIdCommand.cs
│   │   │   └── UploadSessionsCommand.cs
│   │   ├── DTO/
│   │   │   ├── ContactMessage.cs
│   │   │   ├── ProcessListData.cs
│   │   │   ├── SessionCollectionDTO.cs
│   │   │   ├── SessionCollectionReducedDTO.cs
│   │   │   ├── SqAppNotification.cs
│   │   │   ├── SqSessionCollection.cs
│   │   │   └── UserClaims.cs
│   │   ├── Exceptions/
│   │   │   └── SessionCollectionNotFoundException.cs
│   │   ├── Extensions/
│   │   │   ├── ByteArrayExtensions.cs
│   │   │   └── HttpRequestExtensions.cs
│   │   ├── Interfaces/
│   │   │   ├── ICrashlogReportingService.cs
│   │   │   ├── IProcessListService.cs
│   │   │   ├── ISessionService.cs
│   │   │   └── IUserClaimsProvider.cs
│   │   ├── Mappings/
│   │   │   ├── AppNotificationProfile.cs
│   │   │   ├── ProcessListProfile.cs
│   │   │   └── SessionCollectionProfile.cs
│   │   ├── Options/
│   │   │   └── SmtpOptions.cs
│   │   ├── Providers/
│   │   │   └── UserClaimsProvider.cs
│   │   └── Queries/
│   │       ├── GetAppNotificationQuery.cs
│   │       ├── GetProcessListQuery.cs
│   │       ├── GetSessionCollectionByIdQuery.cs
│   │       ├── GetSessionCollectionReducedByIdQuery.cs
│   │       ├── GetSessionCollectionsReducedForUserByIdQuery.cs
│   │       ├── GetSessionDetailByFileIdQuery.cs
│   │       └── SearchSessionsQuery.cs
│   ├── CapFrameX.Webservice.Host/
│   │   ├── Attributes/
│   │   │   └── UserAgentFilter.cs
│   │   ├── CapFrameX.Webservice.Host.csproj
│   │   ├── Controllers/
│   │   │   ├── AppNotificationController.cs
│   │   │   ├── ContactController.cs
│   │   │   ├── CrashLogsController.cs
│   │   │   ├── ProcessListController.cs
│   │   │   ├── SessionCollectionsController.cs
│   │   │   └── SessionsController.cs
│   │   ├── Dockerfile
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── launchSettings.json
│   │   ├── Startup.cs
│   │   ├── appsettings.Development.json
│   │   └── appsettings.json
│   ├── CapFrameX.Webservice.Implementation/
│   │   ├── CapFrameX.Webservice.Implementation.csproj
│   │   ├── Handlers/
│   │   │   ├── AddProcessHandler.cs
│   │   │   ├── DeleteSessionCollectionByIdHandler.cs
│   │   │   ├── GetAppNotificationHandler.cs
│   │   │   ├── GetProcessListHandler.cs
│   │   │   ├── GetSessionCollectionByIdHandler.cs
│   │   │   ├── GetSessionCollectionReducedByIdHandler.cs
│   │   │   ├── GetSessionCollectionsReducedByUserIdHandler.cs
│   │   │   ├── GetSessionDetailByFileIdHandler.cs
│   │   │   ├── SearchSessionsHandler.cs
│   │   │   └── UploadCapturesHandler.cs
│   │   └── Services/
│   │       └── SquidexService.cs
│   ├── CapFrameX.Webservice.Persistance/
│   │   ├── CXContext.cs
│   │   ├── CapFrameX.Webservice.Persistance.csproj
│   │   ├── Configurations/
│   │   │   ├── GameConfiguration.cs
│   │   │   ├── IgnoreEntryConfiguration.cs
│   │   │   ├── SessionCollectionConfiguration.cs
│   │   │   └── SessionProxyConfiguratation.cs
│   │   └── Migrations/
│   │       ├── 20200226211712_Initial.Designer.cs
│   │       ├── 20200226211712_Initial.cs
│   │       ├── 20200313210429_drop_collectionName.Designer.cs
│   │       ├── 20200313210429_drop_collectionName.cs
│   │       ├── 20200314201139_processLists.Designer.cs
│   │       ├── 20200314201139_processLists.cs
│   │       └── CXContextModelSnapshot.cs
│   ├── CapFrameXBootstrapper/
│   │   ├── Bundle.wxs
│   │   ├── CapFrameXBootstrapper.wixproj
│   │   ├── license.rtf
│   │   └── theme.xml
│   ├── CapFrameXInstaller/
│   │   ├── CapFrameX.Binaries.wxs
│   │   ├── CapFrameXInstaller.wixproj
│   │   ├── Product.wxs
│   │   └── filter.xslt
│   ├── LibreHardwareMonitorLib/
│   │   ├── Hardware/
│   │   │   ├── Battery/
│   │   │   │   ├── Battery.cs
│   │   │   │   ├── BatteryChemistry.cs
│   │   │   │   └── BatteryGroup.cs
│   │   │   ├── CompositeSensor.cs
│   │   │   ├── Computer.cs
│   │   │   ├── Control.cs
│   │   │   ├── Controller/
│   │   │   │   ├── AeroCool/
│   │   │   │   │   ├── AeroCoolGroup.cs
│   │   │   │   │   └── P7-H1.cs
│   │   │   │   ├── AquaComputer/
│   │   │   │   │   ├── AquaComputerGroup.cs
│   │   │   │   │   ├── AquastreamUltimate.cs
│   │   │   │   │   ├── AquastreamXT.cs
│   │   │   │   │   ├── D5Next.cs
│   │   │   │   │   ├── Farbwerk.cs
│   │   │   │   │   ├── Farbwerk360.cs
│   │   │   │   │   ├── HighFlowNext.cs
│   │   │   │   │   ├── MPS.cs
│   │   │   │   │   ├── Octo.cs
│   │   │   │   │   └── Quadro.cs
│   │   │   │   ├── Heatmaster/
│   │   │   │   │   ├── Heatmaster.cs
│   │   │   │   │   └── HeatmasterGroup.cs
│   │   │   │   ├── Nzxt/
│   │   │   │   │   ├── GridV3.cs
│   │   │   │   │   ├── KrakenV2.cs
│   │   │   │   │   ├── KrakenV3.cs
│   │   │   │   │   └── NzxtGroup.cs
│   │   │   │   ├── Razer/
│   │   │   │   │   ├── RazerFanController.cs
│   │   │   │   │   └── RazerGroup.cs
│   │   │   │   └── TBalancer/
│   │   │   │       ├── TBalancer.cs
│   │   │   │       └── TBalancerGroup.cs
│   │   │   ├── Cpu/
│   │   │   │   ├── Amd0FCpu.cs
│   │   │   │   ├── Amd10Cpu.cs
│   │   │   │   ├── Amd17Cpu.cs
│   │   │   │   ├── AmdCpu.cs
│   │   │   │   ├── CpuArchitecture.cs
│   │   │   │   ├── CpuGroup.cs
│   │   │   │   ├── CpuId.cs
│   │   │   │   ├── CpuLoad.cs
│   │   │   │   ├── GenericCpu.cs
│   │   │   │   └── IntelCpu.cs
│   │   │   ├── D3DDisplayDevice.cs
│   │   │   ├── FirmwareTable.cs
│   │   │   ├── Gpu/
│   │   │   │   ├── AmdGpu.cs
│   │   │   │   ├── AmdGpuGroup.cs
│   │   │   │   ├── Display.cs
│   │   │   │   ├── GenericGpu.cs
│   │   │   │   ├── IntelD3DGpu.cs
│   │   │   │   ├── IntelGclGpu.cs
│   │   │   │   ├── IntelGpuGroup.cs
│   │   │   │   ├── NvDisplayHandleInfo.cs
│   │   │   │   ├── NvidiaGpu.cs
│   │   │   │   └── NvidiaGroup.cs
│   │   │   ├── GpuSensorCache.cs
│   │   │   ├── GroupAffinity.cs
│   │   │   ├── Hardware.cs
│   │   │   ├── HardwareType.cs
│   │   │   ├── IComputer.cs
│   │   │   ├── IControl.cs
│   │   │   ├── IElement.cs
│   │   │   ├── IGroup.cs
│   │   │   ├── IHardware.cs
│   │   │   ├── IHardwareChanged.cs
│   │   │   ├── IParameter.cs
│   │   │   ├── ISensor.cs
│   │   │   ├── ISensorLimits.cs
│   │   │   ├── ISettings.cs
│   │   │   ├── IVisitor.cs
│   │   │   ├── Identifier.cs
│   │   │   ├── Memory/
│   │   │   │   ├── DimmMemory.cs
│   │   │   │   ├── MemoryGroup.cs
│   │   │   │   ├── MemoryLinux.cs
│   │   │   │   ├── MemoryWindows.cs
│   │   │   │   ├── Sensors/
│   │   │   │   │   └── SpdThermalSensor.cs
│   │   │   │   ├── TotalMemory.cs
│   │   │   │   └── VirtualMemory.cs
│   │   │   ├── Motherboard/
│   │   │   │   ├── Control.cs
│   │   │   │   ├── Fan.cs
│   │   │   │   ├── Identification.cs
│   │   │   │   ├── Lpc/
│   │   │   │   │   ├── Chip.cs
│   │   │   │   │   ├── EC/
│   │   │   │   │   │   ├── EmbeddedController.cs
│   │   │   │   │   │   ├── EmbeddedControllerReader.cs
│   │   │   │   │   │   ├── EmbeddedControllerSource.cs
│   │   │   │   │   │   ├── IEmbeddedControllerIO.cs
│   │   │   │   │   │   ├── WindowsEmbeddedController.cs
│   │   │   │   │   │   └── WindowsEmbeddedControllerIO.cs
│   │   │   │   │   ├── F718XX.cs
│   │   │   │   │   ├── IGigabyteController.cs
│   │   │   │   │   ├── ISuperIO.cs
│   │   │   │   │   ├── IT87XX.cs
│   │   │   │   │   ├── Ipmi.cs
│   │   │   │   │   ├── LMSensors.cs
│   │   │   │   │   ├── LpcIO.cs
│   │   │   │   │   ├── LpcPort.cs
│   │   │   │   │   ├── Nct677X.cs
│   │   │   │   │   └── W836XX.cs
│   │   │   │   ├── Manufacturer.cs
│   │   │   │   ├── Model.cs
│   │   │   │   ├── Motherboard.cs
│   │   │   │   ├── MotherboardGroup.cs
│   │   │   │   ├── SuperIOHardware.cs
│   │   │   │   ├── Temperature.cs
│   │   │   │   └── Voltage.cs
│   │   │   ├── Mutexes.cs
│   │   │   ├── Network/
│   │   │   │   ├── Network.cs
│   │   │   │   └── NetworkGroup.cs
│   │   │   ├── OpCode.cs
│   │   │   ├── Parameter.cs
│   │   │   ├── ParameterDescription.cs
│   │   │   ├── Psu/
│   │   │   │   ├── Corsair/
│   │   │   │   │   ├── CorsairPsu.cs
│   │   │   │   │   ├── CorsairPsuGroup.cs
│   │   │   │   │   └── UsbApi.cs
│   │   │   │   ├── Msi/
│   │   │   │   │   ├── MsiPsu.cs
│   │   │   │   │   ├── MsiPsuGroup.cs
│   │   │   │   │   └── UsbApi.cs
│   │   │   │   └── ProtocolError.cs
│   │   │   ├── RefreshRateBuffer.cs
│   │   │   ├── RyzenSMU.cs
│   │   │   ├── SMBios.cs
│   │   │   ├── Sensor.cs
│   │   │   ├── SensorVisitor.cs
│   │   │   ├── Simulation/
│   │   │   │   ├── SimulatedCpu.cs
│   │   │   │   ├── SimulatedCpuGroup.cs
│   │   │   │   ├── SimulatedGpu.cs
│   │   │   │   ├── SimulatedGpuGroup.cs
│   │   │   │   ├── SimulationConfiguration.cs
│   │   │   │   └── SimulationHelpers.cs
│   │   │   ├── Storage/
│   │   │   │   ├── ATAStorage.cs
│   │   │   │   ├── AbstractStorage.cs
│   │   │   │   ├── DebugSmart.cs
│   │   │   │   ├── GenericHardDisk.cs
│   │   │   │   ├── INVMeDrive.cs
│   │   │   │   ├── ISmart.cs
│   │   │   │   ├── NVMeGeneric.cs
│   │   │   │   ├── NVMeHealthInfo.cs
│   │   │   │   ├── NVMeInfo.cs
│   │   │   │   ├── NVMeIntel.cs
│   │   │   │   ├── NVMeIntelRst.cs
│   │   │   │   ├── NVMeSamsung.cs
│   │   │   │   ├── NVMeSmart.cs
│   │   │   │   ├── NVMeWindows.cs
│   │   │   │   ├── NamePrefixAttribute.cs
│   │   │   │   ├── RequireSmartAttribute.cs
│   │   │   │   ├── SmartAttribute.cs
│   │   │   │   ├── SmartNames.cs
│   │   │   │   ├── SsdIndilinx.cs
│   │   │   │   ├── SsdIntel.cs
│   │   │   │   ├── SsdMicron.cs
│   │   │   │   ├── SsdPlextor.cs
│   │   │   │   ├── SsdSamsung.cs
│   │   │   │   ├── SsdSandforce.cs
│   │   │   │   ├── StorageGeneric.cs
│   │   │   │   ├── StorageGroup.cs
│   │   │   │   ├── StorageInfo.cs
│   │   │   │   ├── WindowsSmart.cs
│   │   │   │   └── WindowsStorage.cs
│   │   │   └── ThreadAffinity.cs
│   │   ├── Interop/
│   │   │   ├── ADLX.cs
│   │   │   ├── AtaSmart.cs
│   │   │   ├── ByteExtensions.cs
│   │   │   ├── Ftd2xx.cs
│   │   │   ├── IGCL.cs
│   │   │   ├── Ipmi.cs
│   │   │   ├── LibC.cs
│   │   │   ├── NtDll.cs
│   │   │   ├── NvApi.cs
│   │   │   └── NvidiaML.cs
│   │   ├── LibreHardwareMonitorLib.csproj
│   │   ├── NativeMethods.txt
│   │   ├── PawnIo/
│   │   │   ├── AmdFamily0F.cs
│   │   │   ├── AmdFamily10.cs
│   │   │   ├── AmdFamily17.cs
│   │   │   ├── DriverInstaller.cs
│   │   │   ├── IntelImc.cs
│   │   │   ├── IntelMsr.cs
│   │   │   ├── LpcACPIEC.cs
│   │   │   ├── LpcIO.cs
│   │   │   ├── PawnIO.sys
│   │   │   ├── PawnIOLib.h
│   │   │   ├── PawnIo.cs
│   │   │   └── RyzenSmu.cs
│   │   ├── RAMSPDToolkitDriver.cs
│   │   ├── Resources/
│   │   │   └── PawnIO/
│   │   │       ├── COPYING
│   │   │       └── README
│   │   ├── Software/
│   │   │   └── OperatingSystem.cs
│   │   └── main.nuget.target
│   ├── MonitoringLibTestApp/
│   │   ├── App.config
│   │   ├── MonitoringLibTestApp.csproj
│   │   ├── Program.cs
│   │   ├── Properties/
│   │   │   └── AssemblyInfo.cs
│   │   ├── SensorService.cs
│   │   ├── app.manifest
│   │   └── packages.config
│   └── PipeTestConsoleApp/
│       ├── App.config
│       ├── PipeTestConsoleApp.csproj
│       ├── Program.cs
│       └── Properties/
│           └── AssemblyInfo.cs
└── version/
    └── Version.txt
Download .txt
Showing preview only (1,156K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (12384 symbols across 1348 files)

FILE: capframex-linux/src/app/CapFrameX.App/App.axaml.cs
  class App (line 15) | public partial class App : Application
    method Initialize (line 19) | public override void Initialize()
    method OnFrameworkInitializationCompleted (line 24) | public override void OnFrameworkInitializationCompleted()
    method OnShutdownRequested (line 48) | private void OnShutdownRequested(object? sender, ShutdownRequestedEven...
    method ConfigureServices (line 66) | private static void ConfigureServices(IServiceCollection services)

FILE: capframex-linux/src/app/CapFrameX.App/Program.cs
  class Program (line 6) | class Program
    method Main (line 8) | [STAThread]
    method BuildAvaloniaApp (line 12) | public static AppBuilder BuildAvaloniaApp()

FILE: capframex-linux/src/app/CapFrameX.App/ViewModels/AnalysisViewModel.cs
  class AnalysisViewModel (line 16) | public partial class AnalysisViewModel : ObservableObject, IDisposable
    method AnalysisViewModel (line 98) | public AnalysisViewModel(SessionManager sessionManager)
    method OnSessionsChanged (line 144) | private void OnSessionsChanged(object? sender, EventArgs e)
    method OnSessionAdded (line 157) | private void OnSessionAdded(object? sender, SessionMetadata metadata)
    method OnSessionRemoved (line 168) | private void OnSessionRemoved(object? sender, string filePath)
    method Dispose (line 197) | public void Dispose()
    method LoadSessionsAsync (line 204) | [RelayCommand]
    method RefreshAsync (line 229) | [RelayCommand]
    method OnSelectedSessionChanged (line 235) | partial void OnSelectedSessionChanged(SessionMetadata? value)
    method LoadSessionDataAsync (line 243) | private async Task LoadSessionDataAsync(SessionMetadata metadata)
    method UpdateCharts (line 277) | private void UpdateCharts()
    method DeleteSession (line 306) | [RelayCommand]

FILE: capframex-linux/src/app/CapFrameX.App/ViewModels/CaptureViewModel.cs
  class CaptureViewModel (line 21) | public partial class CaptureViewModel : ObservableObject, IDisposable
    method OnSelectedGameChanged (line 77) | partial void OnSelectedGameChanged(GameInfo? oldValue, GameInfo? newVa...
    method OnLiveChartEnabledChanged (line 92) | partial void OnLiveChartEnabledChanged(bool value)
    method UpdateLiveViewAsync (line 103) | private async Task UpdateLiveViewAsync()
    method StartLiveViewAsync (line 118) | private async Task StartLiveViewAsync()
    method StopLiveViewAsync (line 128) | private async Task StopLiveViewAsync()
    method CaptureViewModel (line 204) | public CaptureViewModel(
    method UpdateLiveStats (line 380) | private void UpdateLiveStats()
    method UpdateCaptureTimeDisplay (line 398) | private void UpdateCaptureTimeDisplay()
    method UpdateHardwareMetrics (line 421) | private void UpdateHardwareMetrics()
    method PollProcesses (line 480) | private void PollProcesses()
    method ToggleCaptureAsync (line 516) | [RelayCommand]
    method AddToIgnoreListAsync (line 529) | [RelayCommand]
    method StartCaptureAsync (line 549) | private async Task StartCaptureAsync()
    method StopCaptureAsync (line 600) | private async Task StopCaptureAsync()
    method Dispose (line 639) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.App/ViewModels/CompareViewModel.cs
  class CompareViewModel (line 15) | public partial class CompareViewModel : ObservableObject, IDisposable
    method CompareViewModel (line 52) | public CompareViewModel(SessionManager sessionManager)
    method OnSessionsChanged (line 65) | private void OnSessionsChanged(object? sender, EventArgs e)
    method OnSessionAdded (line 78) | private void OnSessionAdded(object? sender, SessionMetadata metadata)
    method OnSessionRemoved (line 89) | private void OnSessionRemoved(object? sender, string filePath)
    method Dispose (line 116) | public void Dispose()
    method LoadSessionsAsync (line 123) | [RelayCommand]
    method AddSessionAsync (line 146) | [RelayCommand]
    method RemoveSession (line 161) | [RelayCommand]
    method ClearAll (line 175) | [RelayCommand]
    method UpdateComparison (line 184) | private void UpdateComparison()
  class ComparisonRow (line 236) | public partial class ComparisonRow : ObservableObject

FILE: capframex-linux/src/app/CapFrameX.App/ViewModels/MainViewModel.cs
  class MainViewModel (line 10) | public partial class MainViewModel : ObservableObject, IDisposable
    method MainViewModel (line 57) | public MainViewModel(CaptureService captureService)
    method CheckVulkanLayerStatus (line 91) | private void CheckVulkanLayerStatus()
    method FindDaemonProcess (line 98) | private void FindDaemonProcess()
    method OnStatusTimerElapsed (line 114) | private void OnStatusTimerElapsed(object? sender, ElapsedEventArgs e)
    method ConnectAsync (line 172) | [RelayCommand]
    method Dispose (line 183) | public void Dispose()
    method SelectTab (line 190) | [RelayCommand]
    method OnSelectedTabIndexChanged (line 197) | partial void OnSelectedTabIndexChanged(int value)

FILE: capframex-linux/src/app/CapFrameX.App/ViewModels/SettingsViewModel.cs
  class SettingsViewModel (line 8) | public partial class SettingsViewModel : ObservableObject
    method SettingsViewModel (line 28) | public SettingsViewModel(ISettingsService settingsService, IGlobalHotk...
    method OnCaptureHotkeyChanged (line 42) | partial void OnCaptureHotkeyChanged(string value)
    method OnCaptureDurationSecondsChanged (line 48) | partial void OnCaptureDurationSecondsChanged(decimal? value)
    method OnAutoStopEnabledChanged (line 54) | partial void OnAutoStopEnabledChanged(bool value)
    method SaveSettings (line 59) | private void SaveSettings()
    method UpdateHotkeyStatus (line 69) | private void UpdateHotkeyStatus()
    method SetHotkey (line 74) | [RelayCommand]
    method SetDuration (line 80) | [RelayCommand]

FILE: capframex-linux/src/app/CapFrameX.App/Views/AnalysisView.axaml.cs
  class AnalysisView (line 5) | public partial class AnalysisView : UserControl
    method AnalysisView (line 7) | public AnalysisView()

FILE: capframex-linux/src/app/CapFrameX.App/Views/CaptureView.axaml.cs
  class CaptureView (line 5) | public partial class CaptureView : UserControl
    method CaptureView (line 7) | public CaptureView()

FILE: capframex-linux/src/app/CapFrameX.App/Views/CompareView.axaml.cs
  class CompareView (line 5) | public partial class CompareView : UserControl
    method CompareView (line 7) | public CompareView()

FILE: capframex-linux/src/app/CapFrameX.App/Views/MainWindow.axaml.cs
  class MainWindow (line 8) | public partial class MainWindow : Window
    method MainWindow (line 18) | public MainWindow()
  class TabIndexToVisibilityConverter (line 25) | public class TabIndexToVisibilityConverter : IValueConverter
    method Convert (line 27) | public object? Convert(object? value, Type targetType, object? paramet...
    method ConvertBack (line 34) | public object? ConvertBack(object? value, Type targetType, object? par...

FILE: capframex-linux/src/app/CapFrameX.App/Views/SettingsPanel.axaml.cs
  class SettingsPanel (line 5) | public partial class SettingsPanel : UserControl
    method SettingsPanel (line 7) | public SettingsPanel()

FILE: capframex-linux/src/app/CapFrameX.Core/Analysis/FrametimeAnalyzer.cs
  class FrametimeAnalyzer (line 8) | public class FrametimeAnalyzer
    method FrametimeAnalyzer (line 13) | public FrametimeAnalyzer(IEnumerable<FrameData> frames)
    method GetFrametimes (line 35) | public IReadOnlyList<double> GetFrametimes()
    method GetFpsValues (line 43) | public IReadOnlyList<double> GetFpsValues()
    method GetTimeSeriesData (line 51) | public (double[] time, double[] frametime) GetTimeSeriesData()
    method GetFpsTimeSeriesData (line 70) | public (double[] time, double[] fps) GetFpsTimeSeriesData()
    method DetectStutters (line 80) | public IReadOnlyList<(int index, double frametime, double severity)> D...
    method CalculateFramePacing (line 98) | public double CalculateFramePacing()
    method GetHistogramData (line 116) | public (double[] bins, int[] counts) GetHistogramData(int binCount = 50)
    method GetLShapeCurve (line 124) | public (double[] percentiles, double[] frametimes) GetLShapeCurve(int ...
    method CompareTo (line 132) | public SessionComparison CompareTo(FrametimeAnalyzer other)
  type SessionComparison (line 149) | public record SessionComparison

FILE: capframex-linux/src/app/CapFrameX.Core/Analysis/StatisticsCalculator.cs
  type FrametimeStatistics (line 8) | public record FrametimeStatistics
  class StatisticsCalculator (line 34) | public static class StatisticsCalculator
    method Calculate (line 36) | public static FrametimeStatistics Calculate(IReadOnlyList<FrameData> f...
    method Calculate (line 45) | public static FrametimeStatistics Calculate(IReadOnlyList<double> fram...
    method GetPercentile (line 87) | public static double GetPercentile(IReadOnlyList<double> sortedData, d...
    method MovingAverage (line 106) | public static IReadOnlyList<double> MovingAverage(IReadOnlyList<double...
    method CalculateHistogram (line 134) | public static (double[] bins, int[] counts) CalculateHistogram(
    method CalculateLShapeCurve (line 172) | public static (double[] percentiles, double[] frametimes) CalculateLSh...

FILE: capframex-linux/src/app/CapFrameX.Core/Capture/DaemonClient.cs
  class CaptureService (line 12) | public class CaptureService : IDisposable
    method CaptureService (line 27) | public CaptureService()
    method ConnectAsync (line 110) | public async Task<bool> ConnectAsync(CancellationToken cancellationTok...
    method TryStartDaemonAsync (line 174) | private async Task<bool> TryStartDaemonAsync(CancellationToken cancell...
    method FindDaemonPath (line 228) | private static string? FindDaemonPath()
    method DisconnectAsync (line 268) | public async Task DisconnectAsync()
    method StartCaptureAsync (line 273) | public async Task StartCaptureAsync(int pid)
    method StopCaptureAsync (line 290) | public async Task StopCaptureAsync()
    method AddToIgnoreListAsync (line 307) | public async Task AddToIgnoreListAsync(string processName)
    method RemoveFromIgnoreListAsync (line 312) | public async Task RemoveFromIgnoreListAsync(string processName)
    method RequestIgnoreListAsync (line 317) | public async Task RequestIgnoreListAsync()
    method StopDaemon (line 322) | public void StopDaemon()
    method Dispose (line 341) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.Core/Capture/FrametimeReceiver.cs
  class FrametimeReceiver (line 10) | public class FrametimeReceiver : IDisposable
    method StartCapture (line 29) | public void StartCapture()
    method StopCapture (line 41) | public void StopCapture()
    method AddFrame (line 46) | public void AddFrame(FrameDataPoint point)
    method GetCapturedFrames (line 80) | public IReadOnlyList<FrameData> GetCapturedFrames()
    method ClearBuffer (line 88) | public void ClearBuffer()
    method GetLiveStats (line 99) | public LiveStats GetLiveStats()
    method Dispose (line 132) | public void Dispose()
  type LiveStats (line 138) | public record LiveStats

FILE: capframex-linux/src/app/CapFrameX.Core/Configuration/AppSettings.cs
  class AppSettings (line 6) | public class AppSettings

FILE: capframex-linux/src/app/CapFrameX.Core/Configuration/SettingsService.cs
  type ISettingsService (line 7) | public interface ISettingsService : IDisposable
    method Save (line 11) | void Save();
    method Load (line 12) | void Load();
    method UpdateSettings (line 13) | void UpdateSettings(Action<AppSettings> updateAction);
  class SettingsService (line 16) | public class SettingsService : ISettingsService
    method SettingsService (line 30) | public SettingsService()
    method Load (line 43) | public void Load()
    method Save (line 67) | public void Save()
    method UpdateSettings (line 80) | public void UpdateSettings(Action<AppSettings> updateAction)
    method Dispose (line 87) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.Core/Data/Session.cs
  class SessionIO (line 10) | public static class SessionIO
    method LoadAsync (line 21) | public static async Task<CaptureSession> LoadAsync(string csvPath)
    method SaveAsync (line 86) | public static async Task SaveAsync(CaptureSession session, string base...
    class SessionMetadataJson (line 127) | private class SessionMetadataJson

FILE: capframex-linux/src/app/CapFrameX.Core/Data/SessionManager.cs
  class SessionManager (line 9) | public class SessionManager : IDisposable
    method SessionManager (line 34) | public SessionManager()
    method OnSessionFileCreated (line 54) | private void OnSessionFileCreated(object sender, FileSystemEventArgs e)
    method OnSessionFileDeleted (line 66) | private void OnSessionFileDeleted(object sender, FileSystemEventArgs e)
    method OnSessionFileRenamed (line 81) | private void OnSessionFileRenamed(object sender, RenamedEventArgs e)
    method LoadSingleSessionAsync (line 96) | private async void LoadSingleSessionAsync(string filePath)
    method Dispose (line 142) | public void Dispose()
    method GetSessionsAsync (line 159) | public async Task<IReadOnlyList<SessionMetadata>> GetSessionsAsync()
    method LoadSessionAsync (line 209) | public async Task<CaptureSession> LoadSessionAsync(string filePath)
    method SaveSessionAsync (line 217) | public async Task<SessionMetadata> SaveSessionAsync(CaptureSession ses...
    method DeleteSession (line 259) | public void DeleteSession(string filePath)
    method ExportSessionAsync (line 288) | public async Task ExportSessionAsync(CaptureSession session, string ex...
    method GenerateFileName (line 293) | private static string GenerateFileName(string gameName)

FILE: capframex-linux/src/app/CapFrameX.Core/Hardware/CpuInfo.cs
  class CpuInfo (line 6) | public class CpuInfo
    method ToString (line 43) | public override string ToString() => Name;
  class CpuMetrics (line 49) | public class CpuMetrics

FILE: capframex-linux/src/app/CapFrameX.Core/Hardware/GpuInfo.cs
  type GpuType (line 6) | public enum GpuType
  type GpuVendor (line 18) | public enum GpuVendor
  class GpuInfo (line 29) | public class GpuInfo
    method ToString (line 81) | public override string ToString() => $"{Name} ({Type})";
  class GpuMetrics (line 87) | public class GpuMetrics

FILE: capframex-linux/src/app/CapFrameX.Core/Hardware/HardwareMonitor.cs
  class HardwareMonitor (line 6) | public class HardwareMonitor : IDisposable
    method Initialize (line 37) | public void Initialize()
    method GetGpuMetrics (line 56) | public GpuMetrics? GetGpuMetrics(GpuInfo? gpu = null)
    method GetCpuMetrics (line 67) | public CpuMetrics? GetCpuMetrics()
    method GetMemoryInfo (line 76) | public (ulong TotalBytes, ulong AvailableBytes) GetMemoryInfo()
    method GetMotherboardInfo (line 84) | public (string Vendor, string Name) GetMotherboardInfo()
    method GetKernelVersion (line 92) | public string GetKernelVersion() => _sysfs.GetKernelVersion();
    method GetDistribution (line 97) | public string GetDistribution() => _sysfs.GetDistribution();
    method FormatBytes (line 102) | public static string FormatBytes(ulong bytes)
    method Dispose (line 115) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.Core/Hardware/SysfsReader.cs
  class SysfsReader (line 6) | public class SysfsReader
    method GetCpuInfo (line 22) | public CpuInfo GetCpuInfo()
    method GetCpuMetrics (line 84) | public CpuMetrics GetCpuMetrics(CpuInfo cpuInfo)
    method GetCpuUsage (line 144) | private float? GetCpuUsage()
    method GetRaplPower (line 184) | private float? GetRaplPower()
    method MapGpuPaths (line 206) | public void MapGpuPaths(List<GpuInfo> gpus)
    method GetGpuMetrics (line 235) | public GpuMetrics GetGpuMetrics(GpuInfo gpu)
    method GetMemoryInfo (line 306) | public (ulong TotalBytes, ulong AvailableBytes) GetMemoryInfo()
    method GetMotherboardInfo (line 339) | public (string Vendor, string Name) GetMotherboardInfo()
    method GetKernelVersion (line 349) | public string GetKernelVersion()
    method GetDistribution (line 362) | public string GetDistribution()
    method FindHwmonByName (line 382) | private string? FindHwmonByName(string name)
    method FindDrmCard (line 403) | private string? FindDrmCard(uint vendorId, uint deviceId)
    method FindHwmonForDrmCard (line 434) | private string? FindHwmonForDrmCard(string drmCardPath)
    method ReadHwmonTemp (line 449) | private float? ReadHwmonTemp(string hwmonPath, string file)
    method ReadHwmonValue (line 455) | private float? ReadHwmonValue(string hwmonPath, string file, float div...
    method ReadSysFile (line 473) | private string? ReadSysFile(string path)

FILE: capframex-linux/src/app/CapFrameX.Core/Hardware/VulkanGpuEnumerator.cs
  class VulkanGpuEnumerator (line 8) | public static class VulkanGpuEnumerator
    method EnumerateGpus (line 17) | public static List<GpuInfo> EnumerateGpus()
    method GetDeviceName (line 114) | private static unsafe string GetDeviceName(PhysicalDeviceProperties pr...
    method GetVendor (line 120) | private static GpuVendor GetVendor(uint vendorId)
    method GetGpuType (line 131) | private static GpuType GetGpuType(PhysicalDeviceType deviceType)
    method FormatDriverVersion (line 143) | private static string FormatDriverVersion(uint vendorId, uint driverVe...
    method FormatVulkanVersion (line 161) | private static string FormatVulkanVersion(uint version)

FILE: capframex-linux/src/app/CapFrameX.Core/Hotkey/GlobalHotkeyService.cs
  type IGlobalHotkeyService (line 9) | public interface IGlobalHotkeyService : IDisposable
    method SetCaptureHotkey (line 12) | void SetCaptureHotkey(string hotkeyString);
    method Start (line 13) | void Start();
    method Stop (line 14) | void Stop();
  class GlobalHotkeyService (line 18) | public class GlobalHotkeyService : IGlobalHotkeyService
    method SetCaptureHotkey (line 33) | public void SetCaptureHotkey(string hotkeyString)
    method Start (line 39) | public void Start()
    method Stop (line 70) | public void Stop()
    method OnKeyPressed (line 87) | private void OnKeyPressed(object? sender, KeyboardHookEventArgs e)
    method CheckModifiers (line 97) | private bool CheckModifiers(ModifierMask currentModifiers)
    method ParseHotkey (line 111) | private static void ParseHotkey(string hotkeyString, out KeyCode keyCo...
    method ParseKeyCode (line 149) | private static KeyCode ParseKeyCode(string keyName)
    method Dispose (line 255) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.Core/System/SystemInfoService.cs
  class SystemInfo (line 5) | public class SystemInfo
  type ISystemInfoService (line 24) | public interface ISystemInfoService
    method GetSystemInfo (line 26) | SystemInfo GetSystemInfo();
  class SystemInfoService (line 30) | public class SystemInfoService : ISystemInfoService, IDisposable
    method GetSystemInfo (line 37) | public SystemInfo GetSystemInfo()
    method Dispose (line 71) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.Shared/IPC/Messages.cs
  type MessageType (line 8) | public enum MessageType : uint
  type MessageHeader (line 34) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
  type GameDetectedPayload (line 45) | [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]
  type FrameDataPointIpc (line 62) | [StructLayout(LayoutKind.Sequential, Pack = 1)]
  type IgnoreListEntry (line 80) | [StructLayout(LayoutKind.Sequential, Pack = 1, CharSet = CharSet.Ansi)]

FILE: capframex-linux/src/app/CapFrameX.Shared/IPC/SocketClient.cs
  class DaemonClient (line 10) | public class DaemonClient : IDisposable
    method DaemonClient (line 29) | public DaemonClient()
    method GetRealUid (line 36) | private static uint GetRealUid()
    method ConnectAsync (line 56) | public async Task<bool> ConnectAsync(CancellationToken cancellationTok...
    method DisconnectAsync (line 82) | public async Task DisconnectAsync()
    method SendStartCaptureAsync (line 102) | public async Task SendStartCaptureAsync(int pid)
    method SendStopCaptureAsync (line 107) | public async Task SendStopCaptureAsync()
    method SendPingAsync (line 112) | public async Task SendPingAsync()
    method RequestStatusAsync (line 117) | public async Task RequestStatusAsync()
    method AddToIgnoreListAsync (line 122) | public async Task AddToIgnoreListAsync(string processName)
    method RemoveFromIgnoreListAsync (line 128) | public async Task RemoveFromIgnoreListAsync(string processName)
    method RequestIgnoreListAsync (line 134) | public async Task RequestIgnoreListAsync()
    method CreateIgnoreListEntryPayload (line 139) | private static byte[] CreateIgnoreListEntryPayload(string processName)
    method SendMessageAsync (line 148) | private async Task SendMessageAsync(MessageType type, byte[] payload)
    method ReceiveLoopAsync (line 178) | private async Task ReceiveLoopAsync(CancellationToken cancellationToken)
    method ProcessMessage (line 219) | private void ProcessMessage(MessageType type, byte[] payload)
    method ParseIgnoreListResponse (line 311) | private static List<string> ParseIgnoreListResponse(byte[] payload)
    method BytesToStruct (line 339) | private static T BytesToStruct<T>(byte[] bytes) where T : struct
    method GetStringFromFixedBuffer (line 352) | private static unsafe string GetStringFromFixedBuffer(ref GameDetected...
    method Dispose (line 368) | public void Dispose()

FILE: capframex-linux/src/app/CapFrameX.Shared/Models/CaptureSession.cs
  class CaptureSession (line 6) | public class CaptureSession
  class SessionMetadata (line 28) | public class SessionMetadata

FILE: capframex-linux/src/app/CapFrameX.Shared/Models/FrameData.cs
  type FrameData (line 6) | public record FrameData
  type FrameDataPoint (line 28) | public record FrameDataPoint

FILE: capframex-linux/src/app/CapFrameX.Shared/Models/GameInfo.cs
  class GameInfo (line 9) | public class GameInfo : INotifyPropertyChanged
    method OnPropertyChanged (line 101) | protected virtual void OnPropertyChanged([CallerMemberName] string? pr...
    method SetField (line 106) | protected bool SetField<T>(ref T field, T value, [CallerMemberName] st...

FILE: capframex-linux/src/daemon/common.h
  type MessageType (line 21) | typedef enum {
  type ProcessInfo (line 44) | typedef struct {
  type MessageHeader (line 56) | typedef struct {
  type GameDetectedPayload (line 63) | typedef struct {
  type FrameDataPoint (line 76) | typedef struct __attribute__((packed)) {
  type LayerHelloPayload (line 90) | typedef struct {
  type SwapchainInfoPayload (line 99) | typedef struct {
  type SharedPidList (line 108) | typedef struct {
  type IgnoreListEntry (line 115) | typedef struct {

FILE: capframex-linux/src/daemon/config.c
  function ensure_directory (line 11) | static void ensure_directory(const char* path) {
  function config_set_defaults (line 20) | void config_set_defaults(void) {
  function DaemonConfig (line 58) | DaemonConfig* config_get(void) {
  function config_load (line 79) | int config_load(const char* path) {
  function config_save (line 125) | int config_save(const char* path) {

FILE: capframex-linux/src/daemon/config.h
  type DaemonConfig (line 7) | typedef struct {

FILE: capframex-linux/src/daemon/ignore_list.c
  type IgnoreEntry (line 14) | typedef struct {
  function ensure_directory (line 30) | static void ensure_directory(const char* path) {
  function ignore_list_init (line 39) | int ignore_list_init(void) {
  function ignore_list_contains (line 69) | bool ignore_list_contains(const char* process_name) {
  function ignore_list_add (line 85) | int ignore_list_add(const char* process_name) {
  function ignore_list_remove (line 120) | int ignore_list_remove(const char* process_name) {
  function ignore_list_count (line 148) | int ignore_list_count(void) {
  function ignore_list_reload (line 168) | int ignore_list_reload(void) {
  function ignore_list_cleanup (line 186) | void ignore_list_cleanup(void) {
  function get_iso_timestamp (line 196) | static void get_iso_timestamp(char* buf, size_t size) {
  function extract_json_string (line 204) | static bool extract_json_string(const char* json, const char* key, char*...
  function load_from_file (line 234) | static int load_from_file(void) {
  function save_to_file (line 315) | static int save_to_file(void) {

FILE: capframex-linux/src/daemon/ipc.c
  function is_blacklisted_process (line 45) | static bool is_blacklisted_process(const char* process_name) {
  type ClientInfo (line 72) | typedef struct {
  function get_timestamp_ns (line 91) | static uint64_t get_timestamp_ns(void) {
  function create_socket (line 97) | static int create_socket(void) {
  function create_shared_memory (line 153) | static int create_shared_memory(void) {
  function add_client (line 182) | static void add_client(int fd) {
  function remove_client (line 196) | static void remove_client(int fd) {
  function set_client_type (line 216) | static void set_client_type(int fd, ClientType type) {
  function ClientType (line 227) | ClientType ipc_get_client_type(int fd) {
  function ipc_register_layer (line 242) | bool ipc_register_layer(int client_fd, const LayerHelloPayload* hello) {
  function ipc_update_layer_swapchain (line 370) | void ipc_update_layer_swapchain(int client_fd, const SwapchainInfoPayloa...
  function ipc_unregister_layer (line 389) | void ipc_unregister_layer(int client_fd) {
  function LayerClient (line 409) | LayerClient* ipc_get_layer_by_pid(pid_t pid) {
  function LayerClient (line 421) | LayerClient* ipc_get_layer_by_fd(int fd) {
  function ipc_get_layer_count (line 433) | int ipc_get_layer_count(void) {
  function LayerClient (line 440) | LayerClient* ipc_get_layers(int* count) {
  function ipc_get_layers_copy (line 448) | int ipc_get_layers_copy(LayerClient* buffer, int max_count) {
  function ipc_get_layer_by_pid_copy (line 461) | bool ipc_get_layer_by_pid_copy(pid_t pid, LayerClient* out) {
  function ipc_subscribe_app (line 477) | void ipc_subscribe_app(int client_fd, pid_t target_pid) {
  function ipc_unsubscribe_app (line 506) | void ipc_unsubscribe_app(int client_fd) {
  function ipc_unregister_app (line 520) | void ipc_unregister_app(int client_fd) {
  function ipc_forward_frame_data (line 543) | void ipc_forward_frame_data(const FrameDataPoint* frame) {
  function handle_client_message (line 597) | static void handle_client_message(int client_fd, char* buffer, ssize_t l...
  type pollfd (line 636) | struct pollfd
  type pollfd (line 636) | struct pollfd
  function ipc_init (line 696) | int ipc_init(void) {
  function ipc_start (line 714) | int ipc_start(ipc_message_callback callback) {
  function ipc_stop (line 728) | void ipc_stop(void) {
  function ipc_cleanup (line 754) | void ipc_cleanup(void) {
  function ipc_send (line 775) | int ipc_send(int client_fd, MessageType type, void* payload, uint32_t pa...
  function ipc_broadcast (line 795) | int ipc_broadcast(MessageType type, void* payload, uint32_t payload_size) {
  function ipc_broadcast_to_apps (line 809) | int ipc_broadcast_to_apps(MessageType type, void* payload, uint32_t payl...
  function ipc_broadcast_to_non_layers (line 825) | int ipc_broadcast_to_non_layers(MessageType type, void* payload, uint32_...
  function ipc_update_active_pids (line 842) | int ipc_update_active_pids(pid_t* pids, uint32_t count) {
  function ipc_has_clients (line 858) | bool ipc_has_clients(void) {
  function ipc_is_blacklisted_process (line 865) | bool ipc_is_blacklisted_process(const char* process_name) {

FILE: capframex-linux/src/daemon/ipc.h
  type ClientType (line 7) | typedef enum {
  type LayerClient (line 14) | typedef struct {
  type AppSubscription (line 27) | typedef struct {

FILE: capframex-linux/src/daemon/launcher_detect.c
  function launcher_detect_init (line 92) | void launcher_detect_init(void) {
  function LauncherType (line 99) | LauncherType launcher_detect_type(const ProcessInfo* info) {
  function is_in_game_directory (line 126) | static bool is_in_game_directory(const char* exe_path) {
  function launcher_is_blacklisted (line 152) | bool launcher_is_blacklisted(const char* exe_name) {
  function launcher_is_whitelisted (line 171) | bool launcher_is_whitelisted(const char* exe_name) {
  function launcher_is_launcher_child (line 184) | bool launcher_is_launcher_child(pid_t pid, LauncherType* out_launcher_ty...
  function launcher_get_chain (line 211) | int launcher_get_chain(pid_t pid, char* buffer, size_t buffer_size) {
  function is_wine_preloader (line 267) | static bool is_wine_preloader(const char* exe_path) {
  function get_wine_game_name (line 272) | static bool get_wine_game_name(pid_t pid, char* buffer, size_t buffer_si...
  function launcher_is_game_process (line 292) | bool launcher_is_game_process(const ProcessInfo* info) {
  function launcher_whitelist_add (line 380) | void launcher_whitelist_add(const char* exe_name) {
  function launcher_blacklist_add (line 387) | void launcher_blacklist_add(const char* exe_name) {
  function launcher_add_custom (line 394) | void launcher_add_custom(const char* name, const char* exe_pattern) {

FILE: capframex-linux/src/daemon/launcher_detect.h
  type LauncherType (line 7) | typedef enum {
  type LauncherInfo (line 19) | typedef struct {

FILE: capframex-linux/src/daemon/main.c
  function signal_handler (line 24) | static void signal_handler(int sig) {
  function is_wine_preloader (line 30) | static bool is_wine_preloader(const char* exe_path) {
  function get_game_name (line 35) | static void get_game_name(ProcessInfo* info, char* buffer, size_t buffer...
  function add_tracked_game (line 57) | static void add_tracked_game(ProcessInfo* info) {
  function remove_tracked_game (line 101) | static void remove_tracked_game(pid_t pid) {
  function process_event_handler (line 130) | static void process_event_handler(ProcessInfo* info, bool is_new) {
  function ipc_message_handler (line 142) | static void ipc_message_handler(MessageHeader* header, void* payload, in...
  function check_tracked_games (line 391) | static void check_tracked_games(void) {
  function print_usage (line 400) | static void print_usage(const char* program) {
  function main (line 410) | int main(int argc, char* argv[]) {

FILE: capframex-linux/src/daemon/process_monitor.c
  function process_get_exe_path (line 22) | int process_get_exe_path(pid_t pid, char* buffer, size_t buffer_size) {
  function process_get_cmdline (line 34) | int process_get_cmdline(pid_t pid, char* buffer, size_t buffer_size) {
  function get_parent_pid (line 61) | static int get_parent_pid(pid_t pid) {
  function get_process_name (line 85) | static void get_process_name(pid_t pid, char* buffer, size_t buffer_size) {
  function process_get_info (line 104) | int process_get_info(pid_t pid, ProcessInfo* info) {
  function process_is_running (line 153) | bool process_is_running(pid_t pid) {
  function setup_netlink_socket (line 161) | static int setup_netlink_socket(void) {
  type sockaddr_nl (line 213) | struct sockaddr_nl
  type sockaddr (line 218) | struct sockaddr
  type nlmsghdr (line 228) | struct nlmsghdr
  type nlmsghdr (line 228) | struct nlmsghdr
  type cn_msg (line 231) | struct cn_msg
  type proc_event (line 232) | struct proc_event
  type proc_event (line 232) | struct proc_event
  function process_monitor_init (line 261) | int process_monitor_init(void) {
  function process_monitor_start (line 265) | int process_monitor_start(process_event_callback callback) {
  function process_monitor_stop (line 284) | void process_monitor_stop(void) {
  function process_monitor_cleanup (line 314) | void process_monitor_cleanup(void) {
  function process_scan_all (line 323) | void process_scan_all(process_event_callback callback) {

FILE: capframex-linux/src/layer/data_export.c
  function ensure_directory (line 19) | static void ensure_directory(const char* path) {
  function data_export_generate_filename (line 48) | void data_export_generate_filename(char* buffer, size_t buffer_size,
  function data_export_start_session (line 73) | void data_export_start_session(const CaptureSessionInfo* info) {
  function data_export_end_session (line 100) | void data_export_end_session(void) {
  function data_export_is_capturing (line 148) | bool data_export_is_capturing(void) {
  function data_export_add_frame (line 155) | void data_export_add_frame(const FrameTimingData* frame) {
  function data_export_to_csv (line 170) | int data_export_to_csv(const char* filepath) {
  function data_export_to_json (line 209) | int data_export_to_json(const char* filepath) {

FILE: capframex-linux/src/layer/data_export.h
  type CaptureSessionInfo (line 9) | typedef struct {

FILE: capframex-linux/src/layer/ipc_client.c
  function ipc_is_verbose (line 25) | bool ipc_is_verbose(void) {
  function ipc_debug_log (line 33) | void ipc_debug_log(const char* fmt, ...) {
  type timespec (line 54) | struct timespec
  function send_message (line 78) | static int send_message(MessageType type, void* payload, uint32_t payloa...
  function handle_message (line 126) | static void handle_message(MessageHeader* header, void* payload) {
  function get_process_name (line 168) | static void get_process_name(char* buffer, size_t size) {
  function ipc_client_init (line 186) | void ipc_client_init(void) {
  function ipc_client_cleanup (line 196) | void ipc_client_cleanup(void) {
  function ipc_client_connect (line 215) | bool ipc_client_connect(void) {
  function ipc_client_is_connected (line 275) | bool ipc_client_is_connected(void) {
  function ipc_client_try_reconnect (line 279) | bool ipc_client_try_reconnect(void) {
  function ipc_client_set_gpu_name (line 298) | void ipc_client_set_gpu_name(const char* gpu_name) {
  function ipc_client_send_hello (line 307) | void ipc_client_send_hello(const char* gpu_name, bool present_timing_sup...
  function ipc_client_send_swapchain_created (line 332) | void ipc_client_send_swapchain_created(uint32_t width, uint32_t height,
  function ipc_client_send_swapchain_destroyed (line 354) | void ipc_client_send_swapchain_destroyed(void) {
  function ipc_client_send_frame_data (line 372) | void ipc_client_send_frame_data(const FrameTimingData* frame) {

FILE: capframex-linux/src/layer/layer.c
  function layer_init (line 33) | void layer_init(void) {
  function layer_cleanup (line 54) | void layer_cleanup(void) {
  function InstanceData (line 74) | InstanceData* layer_get_instance_data(VkInstance instance) {
  function DeviceData (line 86) | DeviceData* layer_get_device_data(VkDevice device) {
  function layer_store_instance_data (line 98) | void layer_store_instance_data(VkInstance instance, InstanceData* data) {
  function layer_store_device_data (line 108) | void layer_store_device_data(VkDevice device, DeviceData* data) {
  function layer_remove_instance_data (line 118) | void layer_remove_instance_data(VkInstance instance) {
  function layer_remove_device_data (line 134) | void layer_remove_device_data(VkDevice device) {
  function VKAPI_CALL (line 152) | VKAPI_CALL layer_CreateInstance(
  function VKAPI_CALL (line 207) | VKAPI_CALL layer_DestroyInstance(
  function VKAPI_CALL (line 218) | VKAPI_CALL layer_CreateDevice(
  function VKAPI_CALL (line 355) | VKAPI_CALL layer_DestroyDevice(
  function VkResult (line 369) | VkResult VKAPI_CALL vkNegotiateLoaderLayerInterfaceVersion(
  function PFN_vkVoidFunction (line 389) | PFN_vkVoidFunction VKAPI_CALL layer_GetInstanceProcAddr(
  function PFN_vkVoidFunction (line 424) | PFN_vkVoidFunction VKAPI_CALL layer_GetDeviceProcAddr(

FILE: capframex-linux/src/layer/layer.h
  type InstanceDispatch (line 19) | typedef struct {
  type DeviceDispatch (line 29) | typedef struct {
  type InstanceData (line 44) | typedef struct {
  type PresentTimingType (line 52) | typedef enum {
  type DeviceData (line 59) | typedef struct {

FILE: capframex-linux/src/layer/swapchain.c
  function swapchain_init_device (line 15) | void swapchain_init_device(DeviceData* device_data) {
  function swapchain_cleanup_device (line 20) | void swapchain_cleanup_device(DeviceData* device_data) {
  function SwapchainData (line 33) | SwapchainData* swapchain_get_data(VkSwapchainKHR swapchain) {
  function swapchain_get_active_info (line 45) | bool swapchain_get_active_info(uint32_t* width, uint32_t* height,
  function SwapchainData (line 67) | static SwapchainData* add_swapchain(VkDevice device, VkSwapchainKHR swap...
  function remove_swapchain (line 99) | static void remove_swapchain(VkSwapchainKHR swapchain) {
  function VKAPI_CALL (line 118) | VKAPI_CALL layer_CreateSwapchainKHR(
  function VKAPI_CALL (line 149) | VKAPI_CALL layer_DestroySwapchainKHR(
  function SwapchainData (line 168) | static SwapchainData* swapchain_get_data_unlocked(VkSwapchainKHR swapcha...
  function VKAPI_CALL (line 182) | VKAPI_CALL layer_QueuePresentKHR(

FILE: capframex-linux/src/layer/swapchain.h
  type SwapchainData (line 13) | typedef struct {

FILE: capframex-linux/src/layer/timing.c
  function timing_init (line 17) | void timing_init(void) {
  function timing_cleanup (line 27) | void timing_cleanup(void) {
  function timing_get_timestamp (line 31) | uint64_t timing_get_timestamp(void) {
  function timing_record_frame (line 39) | void timing_record_frame(uint64_t frame_number, uint64_t pre_present_ns,...
  function FrameTimingData (line 87) | const FrameTimingData* timing_get_frame_buffer(void) {
  function timing_get_frame_count (line 91) | uint32_t timing_get_frame_count(void) {
  function timing_get_latest_frame (line 98) | bool timing_get_latest_frame(FrameTimingData* out) {
  function timing_get_frames_since (line 113) | uint32_t timing_get_frames_since(uint64_t since_frame, FrameTimingData* ...
  function timing_clear_buffer (line 136) | void timing_clear_buffer(void) {
  function timing_get_average_frametime (line 146) | float timing_get_average_frametime(uint32_t num_frames) {
  function timing_get_current_fps (line 172) | float timing_get_current_fps(void) {

FILE: capframex-linux/src/layer/timing.h
  type FrameTimingData (line 8) | typedef struct {

FILE: pmcreader-plugin/PmcReader.TestApp/App.xaml.cs
  class App (line 5) | public partial class App : Application

FILE: pmcreader-plugin/PmcReader.TestApp/MainWindow.xaml.cs
  class MainWindow (line 19) | public partial class MainWindow : Window
    method MainWindow (line 31) | public MainWindow()
    method Window_OnLoaded (line 37) | private async void Window_OnLoaded(object sender, RoutedEventArgs e)
    method InitializeAsync (line 43) | private async Task InitializeAsync()
    method WriteDiagnostics (line 70) | private static string WriteDiagnostics(out string diagnosticsPath)
    method GetCoreCount (line 168) | private static int GetCoreCount()
    method TryGetCcxId (line 186) | private static int? TryGetCcxId(byte family, uint extendedApicId)
    method FormatOptional (line 196) | private static string FormatOptional(int? value)
    method UpdateSnapshot (line 201) | private void UpdateSnapshot(DateTime timestamp, Dictionary<ISensorEntr...
    method IntervalComboBox_OnSelectionChanged (line 223) | private void IntervalComboBox_OnSelectionChanged(object sender, Select...
    method RefreshButton_OnClick (line 234) | private void RefreshButton_OnClick(object sender, RoutedEventArgs e)
    method Window_OnClosed (line 239) | private void Window_OnClosed(object sender, EventArgs e)
    method FormatValue (line 245) | private static SensorDisplayValue FormatValue(ISensorEntry entry, floa...
    type SensorDisplayValue (line 262) | private readonly struct SensorDisplayValue
      method SensorDisplayValue (line 264) | public SensorDisplayValue(string valueText, string unit)

FILE: pmcreader-plugin/PmcReader.TestApp/SensorRow.cs
  class SensorRow (line 5) | public class SensorRow : INotifyPropertyChanged
    method OnPropertyChanged (line 52) | private void OnPropertyChanged(string propertyName)

FILE: pmcreader-plugin/PmcReader/AMD/Amd10hCpu.cs
  class Amd10hCpu (line 8) | public class Amd10hCpu : GenericMonitoringArea
    method Amd10hCpu (line 26) | public Amd10hCpu()
    method ProgramPerfCounters (line 39) | public void ProgramPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2, ul...
    method ReadFixedCounters (line 55) | public void ReadFixedCounters(int threadIdx, out ulong elapsedTsc)
    method InitializeCoreTotals (line 72) | public void InitializeCoreTotals()
    method UpdateThreadCoreCounterData (line 90) | public void UpdateThreadCoreCounterData(int threadIdx)
    method GetOverallCounterValues (line 138) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    method GetPerfCtlValue (line 164) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, bool e...
    method GetPerfCtlValue (line 192) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, OsUsrM...
    type OsUsrMode (line 209) | public enum OsUsrMode
    type HostGuestOnly (line 220) | public enum HostGuestOnly
    class NormalizedCoreCounterData (line 228) | public class NormalizedCoreCounterData

FILE: pmcreader-plugin/PmcReader/AMD/Amd15hCpu.cs
  class Amd15hCpu (line 8) | public class Amd15hCpu : GenericMonitoringArea
    method Amd15hCpu (line 45) | public Amd15hCpu()
    class FPU (line 53) | public class FPU : MonitoringConfig
      method GetConfigName (line 56) | public string GetConfigName() { return "FPU"; }
      method FPU (line 61) | public FPU(Amd15hCpu amdCpu)
      method GetColumns (line 68) | public string[] GetColumns() { return columns; }
      method Initialize (line 70) | public void Initialize()
      method Update (line 81) | public MonitoringUpdateResults Update()
      method GetHelpText (line 129) | public string GetHelpText()
      method computeMetrics (line 134) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    method ProgramPerfCounters (line 181) | public void ProgramPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2, ul...
    method ReadFixedCounters (line 215) | public void ReadFixedCounters(int threadIdx, out ulong elapsedAperf, o...
    method InitializeCoreTotals (line 246) | public void InitializeCoreTotals()
    method UpdateThreadCoreCounterData (line 268) | public void UpdateThreadCoreCounterData(int threadIdx)
    method GetOverallCounterValues (line 329) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    method GetPerfCtlValue (line 359) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, bool e...
    method GetPerfCtlValue (line 387) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, OsUsrM...
    type OsUsrMode (line 404) | public enum OsUsrMode
    type HostGuestOnly (line 415) | public enum HostGuestOnly
    method GetNBPerfCtlValue (line 431) | public static ulong GetNBPerfCtlValue(byte perfEventLow, byte umask, b...
    class NormalizedCoreCounterData (line 440) | public class NormalizedCoreCounterData
    method InitializeCrazyControls (line 483) | public override void InitializeCrazyControls(FlowLayoutPanel flowLayou...
    method GetL2PrioritizationState (line 530) | private bool GetL2PrioritizationState()
    method HandleL2PrioritzationStateChange (line 536) | public void HandleL2PrioritzationStateChange(object sender, EventArgs e)
    method SetL2Prioritization (line 554) | public void SetL2Prioritization(bool fairness)
    method HandleDisableDcPrefetcherCheckbox (line 577) | public void HandleDisableDcPrefetcherCheckbox(object sender, EventArgs e)
    method GetDcPrefetcherState (line 583) | private bool GetDcPrefetcherState()
    method SetDcPrefetcher (line 589) | public void SetDcPrefetcher(bool enable)
    method HandleCorePerformanceBoostCheckbox (line 612) | public void HandleCorePerformanceBoostCheckbox(object sender, EventArg...
    method GetCpbEnabled (line 618) | private bool GetCpbEnabled()
    method SetCorePerformanceBoost (line 624) | public void SetCorePerformanceBoost(bool enable)

FILE: pmcreader-plugin/PmcReader/AMD/Amd16hCpu.cs
  class Amd16hCpu (line 8) | public class Amd16hCpu : GenericMonitoringArea
    method Amd16hCpu (line 50) | public Amd16hCpu()
    method ProgramCorePerfCounters (line 65) | public void ProgramCorePerfCounters(ulong ctr0, ulong ctr1, ulong ctr2...
    method ProgramL2IPerfCounters (line 89) | public void ProgramL2IPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2,...
    method ProgramNbPerfCounters (line 116) | public void ProgramNbPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2, ...
    method ReadFixedCounters (line 146) | public void ReadFixedCounters(int threadIdx, out ulong elapsedAperf, o...
    method InitializeCoreTotals (line 177) | public void InitializeCoreTotals()
    method UpdateThreadCoreCounterData (line 197) | public void UpdateThreadCoreCounterData(int threadIdx)
    method UpdateL2ICounterData (line 238) | public void UpdateL2ICounterData()
    method UpdateNBCounterData (line 258) | public void UpdateNBCounterData()
    method GetOverallCounterValues (line 286) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    method GetPerfCtlValue (line 314) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, bool e...
    method GetPerfCtlValue (line 342) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, OsUsrM...
    method GetL2iPerfCtlValue (line 356) | public static ulong GetL2iPerfCtlValue(byte perfEvent, byte umask, boo...
    type OsUsrMode (line 371) | public enum OsUsrMode
    type HostGuestOnly (line 382) | public enum HostGuestOnly
    method GetNBPerfCtlValue (line 398) | public static ulong GetNBPerfCtlValue(byte perfEventLow, byte umask, b...
    class NormalizedCounterData (line 407) | public class NormalizedCounterData
    method InitializeCrazyControls (line 445) | public override void InitializeCrazyControls(FlowLayoutPanel flowLayou...
    method HandleCorePerformanceBoostCheckbox (line 459) | public void HandleCorePerformanceBoostCheckbox(object sender, EventArg...
    method GetCpbEnabled (line 465) | private bool GetCpbEnabled()
    method SetCorePerformanceBoost (line 471) | public void SetCorePerformanceBoost(bool enable)

FILE: pmcreader-plugin/PmcReader/AMD/Amd17hCpu.cs
  class Amd17hCpu (line 9) | public class Amd17hCpu : GenericMonitoringArea
    method Amd17hCpu (line 75) | public Amd17hCpu()
    method GetPerfCtlValue (line 107) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, bool u...
    method GetL3PerfCtlValue (line 132) | public static ulong GetL3PerfCtlValue(byte perfEvent, byte umask, bool...
    method Get19hL3PerfCtlValue (line 154) | public static ulong Get19hL3PerfCtlValue(byte perfEvent,
    method GetZen4L3PerfCtlValue (line 180) | public static ulong GetZen4L3PerfCtlValue(byte perfEvent,
    method GetDFPerfCtlValue (line 196) | public static ulong GetDFPerfCtlValue(byte perfEventLow, byte umask, b...
    method EnablePerformanceCounters (line 208) | public void EnablePerformanceCounters()
    method ProgramPerfCounters (line 227) | public void ProgramPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2, ul...
    method GetCcxId (line 257) | public int GetCcxId(int threadId)
    method Get19hCcxId (line 273) | public int Get19hCcxId(int threadId)
    method TryGetExtendedApicId (line 283) | private static bool TryGetExtendedApicId(int threadId, out uint extend...
    method ReadFixedCounters (line 293) | public void ReadFixedCounters(int threadIdx, out ulong elapsedAperf, o...
    method ReadCorePowerCounter (line 333) | public void ReadCorePowerCounter(int threadIdx, out float joulesConsumed)
    method ReadPackagePowerCounter (line 349) | public float ReadPackagePowerCounter()
    method InitializeCoreTotals (line 382) | public void InitializeCoreTotals()
    method UpdateThreadCoreCounterData (line 408) | public void UpdateThreadCoreCounterData(int threadIdx)
    method GetOverallCounterValues (line 475) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    method InitializeCrazyControls (line 502) | public override void InitializeCrazyControls(FlowLayoutPanel flowLayou...
    method HandleL2StreamCheckbox (line 552) | private void HandleL2StreamCheckbox(object sender, EventArgs e)
    method HandleL1dStreamCheckbox (line 568) | private void HandleL1dStreamCheckbox(object sender, EventArgs e)
    method GetL2StreamPrefetchStatus (line 584) | private bool GetL2StreamPrefetchStatus()
    method SetL2StreamPrefetchStatus (line 590) | private void SetL2StreamPrefetchStatus(bool enabled)
    method GetL1DStreamPrefetchStatus (line 598) | private bool GetL1DStreamPrefetchStatus()
    method SetL1DStreamPrefetchStatus (line 604) | private void SetL1DStreamPrefetchStatus(bool enabled)
    method GetStlfErrataEnabled (line 613) | public bool GetStlfErrataEnabled()
    method SetStlfErrataStatus (line 619) | public void SetStlfErrataStatus(bool enabled)
    method HandleStlfErrataCheckbox (line 627) | public void HandleStlfErrataCheckbox(object sender, EventArgs e)
    method GetOpCacheEnabledStatus (line 644) | private bool GetOpCacheEnabledStatus()
    method HandleOpCacheCheckbox (line 650) | public void HandleOpCacheCheckbox(object sender, EventArgs e)
    method DisableOpCache (line 660) | public void DisableOpCache()
    method EnableOpCache (line 685) | public void EnableOpCache()
    method HandleCorePerformanceBoostCheckbox (line 707) | public void HandleCorePerformanceBoostCheckbox(object sender, EventArg...
    method GetCpbEnabled (line 714) | private bool GetCpbEnabled()
    method EnableCorePerformanceBoost (line 720) | public void EnableCorePerformanceBoost()
    method DisableCorePerformanceBoost (line 742) | public void DisableCorePerformanceBoost()
    method SetCpuNameString (line 767) | public void SetCpuNameString(object sender, EventArgs e)
    class NormalizedCoreCounterData (line 792) | public class NormalizedCoreCounterData
    class TopDown (line 839) | public class TopDown : MonitoringConfig
      method GetConfigName (line 842) | public string GetConfigName() { return "Top Down?"; }
      method TopDown (line 844) | public TopDown(Amd17hCpu amdCpu) { cpu = amdCpu; }
      method GetColumns (line 846) | public string[] GetColumns() { return columns; }
      method Initialize (line 848) | public void Initialize()
      method Update (line 859) | public MonitoringUpdateResults Update()
      method GetHelpText (line 878) | public string GetHelpText()
      method computeMetrics (line 883) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PmcMonitoringConfig (line 900) | public class PmcMonitoringConfig : MonitoringConfig
      method GetConfigName (line 903) | public string GetConfigName() { return "Read the events"; }
      method PmcMonitoringConfig (line 905) | public PmcMonitoringConfig(Amd17hCpu amdCpu) { cpu = amdCpu; }
      method GetColumns (line 907) | public string[] GetColumns() { return columns; }
      method Initialize (line 909) | public void Initialize() { }
      method Update (line 911) | public MonitoringUpdateResults Update()
      method GetHelpText (line 953) | public string GetHelpText() { return ""; }
      method computeMetrics (line 955) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Amd19hCpu.cs
  class Amd19hCpu (line 8) | public class Amd19hCpu : GenericMonitoringArea
    method Amd19hCpu (line 79) | public Amd19hCpu()
    method GetPerfCtlValue (line 111) | public static ulong GetPerfCtlValue(byte perfEvent, byte umask, bool u...
    method GetL3PerfCtlValue (line 136) | public static ulong GetL3PerfCtlValue(byte perfEvent, byte umask, bool...
    method Get19hL3PerfCtlValue (line 158) | public static ulong Get19hL3PerfCtlValue(byte perfEvent,
    method Get1AhL3PerfCtlValue (line 184) | public static ulong Get1AhL3PerfCtlValue(byte perfEvent,
    method GetDFPerfCtlValue (line 207) | public static ulong GetDFPerfCtlValue(byte perfEventLow, byte perfEven...
    method GetDFBandwidthPerfCtlValue (line 222) | public static ulong GetDFBandwidthPerfCtlValue(byte instanceId, bool r...
    method GetUmcPerfCtlValue (line 252) | public static ulong GetUmcPerfCtlValue(byte perfEvent, bool maskReads,...
    method EnablePerformanceCounters (line 263) | public void EnablePerformanceCounters()
    method ProgramPerfCounters (line 282) | public void ProgramPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2, ul...
    method GetCcxId (line 313) | public int GetCcxId(int threadId)
    method Get19hCcxId (line 329) | public int Get19hCcxId(int threadId)
    method Get1AhCcxId (line 339) | public int Get1AhCcxId(int threadId)
    method GetCoresPerCcx (line 388) | public int GetCoresPerCcx()
    method TryGetExtendedApicIdEx (line 405) | private static bool TryGetExtendedApicIdEx(int threadId, out uint exte...
    method TryGetExtendedApicId (line 421) | private static bool TryGetExtendedApicId(int threadId, out uint extend...
    method GetUmcPerfmonInfo (line 427) | public void GetUmcPerfmonInfo(out uint umcCount, out uint umcPerfcount...
    method ReadFixedCounters (line 446) | public void ReadFixedCounters(int threadIdx, out ulong elapsedAperf, o...
    method ReadCorePowerCounter (line 486) | public void ReadCorePowerCounter(int threadIdx, out float joulesConsumed)
    method ReadPackagePowerCounter (line 502) | public float ReadPackagePowerCounter()
    method InitializeCoreTotals (line 535) | public void InitializeCoreTotals()
    method UpdateThreadCoreCounterData (line 561) | public void UpdateThreadCoreCounterData(int threadIdx)
    method GetOverallCounterValues (line 646) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    method InitializeCrazyControls (line 673) | public override void InitializeCrazyControls(FlowLayoutPanel flowLayou...
    method HandleL2StreamCheckbox (line 744) | private void HandleL2StreamCheckbox(object sender, EventArgs e)
    method HandleL2UpDownCheckbox (line 752) | private void HandleL2UpDownCheckbox(object sender, EventArgs e)
    method HandleL1dStreamCheckbox (line 760) | private void HandleL1dStreamCheckbox(object sender, EventArgs e)
    method HandleL1dStrideCheckbox (line 768) | private void HandleL1dStrideCheckbox(object sender, EventArgs e)
    method HandleL1dRegionCheckbox (line 776) | private void HandleL1dRegionCheckbox(object sender, EventArgs e)
    method HandlePrefetcherCheckbox (line 784) | private bool HandlePrefetcherCheckbox(Zen4Prefetcher pf, bool enabled)
    type Zen4Prefetcher (line 798) | private enum Zen4Prefetcher
    method SetPrefetcherStatus (line 807) | private void SetPrefetcherStatus(Zen4Prefetcher pf, bool enabled)
    method GetPrefetcherStatus (line 824) | private bool GetPrefetcherStatus(Zen4Prefetcher pf)
    method GetPSFEnabled (line 839) | public bool GetPSFEnabled()
    method SetPsf (line 845) | public void SetPsf(bool enabled)
    method HandlePsfCheckbox (line 853) | public void HandlePsfCheckbox(object sender, EventArgs e)
    method GetOpCacheEnabledStatus (line 870) | private bool GetOpCacheEnabledStatus()
    method HandleOpCacheCheckbox (line 876) | public void HandleOpCacheCheckbox(object sender, EventArgs e)
    method DisableOpCache (line 886) | public void DisableOpCache()
    method EnableOpCache (line 911) | public void EnableOpCache()
    method HandleCorePerformanceBoostCheckbox (line 933) | public void HandleCorePerformanceBoostCheckbox(object sender, EventArg...
    method GetCpbEnabled (line 940) | private bool GetCpbEnabled()
    method EnableCorePerformanceBoost (line 946) | public void EnableCorePerformanceBoost()
    method DisableCorePerformanceBoost (line 968) | public void DisableCorePerformanceBoost()
    method SetCpuNameString (line 993) | public void SetCpuNameString(object sender, EventArgs e)
    class NormalizedCoreCounterData (line 1018) | public class NormalizedCoreCounterData
    class TopDown (line 1076) | public class TopDown : MonitoringConfig
      method GetConfigName (line 1079) | public string GetConfigName() { return "Top Down?"; }
      method TopDown (line 1081) | public TopDown(Amd19hCpu amdCpu) { cpu = amdCpu; }
      method GetColumns (line 1083) | public string[] GetColumns() { return columns; }
      method Initialize (line 1085) | public void Initialize()
      method Update (line 1096) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1115) | public string GetHelpText()
      method computeMetrics (line 1120) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Zen4TopDown (line 1137) | public class Zen4TopDown : MonitoringConfig
      method GetConfigName (line 1141) | public string GetConfigName() { return "Top Down, Dispatch"; }
      method Zen4TopDown (line 1143) | public Zen4TopDown(Amd19hCpu amdCpu, int pipelineSlots)
      method GetColumns (line 1149) | public string[] GetColumns() { return columns; }
      method Initialize (line 1151) | public void Initialize()
      method Update (line 1162) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1181) | public string GetHelpText()
      method computeMetrics (line 1186) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Zen4TDFrontend (line 1207) | public class Zen4TDFrontend : MonitoringConfig
      method GetConfigName (line 1211) | public string GetConfigName() { return "Top Down, Frontend"; }
      method Zen4TDFrontend (line 1213) | public Zen4TDFrontend(Amd19hCpu amdCpu, int slots)
      method GetColumns (line 1219) | public string[] GetColumns() { return columns; }
      method Initialize (line 1221) | public void Initialize()
      method Update (line 1232) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1251) | public string GetHelpText()
      method computeMetrics (line 1256) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Zen4TDBackend (line 1279) | public class Zen4TDBackend : MonitoringConfig
      method GetConfigName (line 1283) | public string GetConfigName() { return "Top Down, Backend Retire"; }
      method Zen4TDBackend (line 1285) | public Zen4TDBackend(Amd19hCpu amdCpu, int slots)
      method GetColumns (line 1291) | public string[] GetColumns() { return columns; }
      method Initialize (line 1293) | public void Initialize()
      method Update (line 1304) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1323) | public string GetHelpText()
      method computeMetrics (line 1328) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2Config (line 1352) | public class L2Config : MonitoringConfig
      method GetConfigName (line 1355) | public string GetConfigName() { return "L2 Cache"; }
      method L2Config (line 1357) | public L2Config(Amd19hCpu amdCpu) { cpu = amdCpu; }
      method GetColumns (line 1359) | public string[] GetColumns() { return columns; }
      method Initialize (line 1361) | public void Initialize()
      method Update (line 1372) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1394) | public string GetHelpText()
      method computeMetrics (line 1399) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FetchConfig (line 1420) | public class FetchConfig : MonitoringConfig
      method GetConfigName (line 1423) | public string GetConfigName() { return "Instruction Fetch"; }
      method FetchConfig (line 1425) | public FetchConfig(Amd19hCpu amdCpu) { cpu = amdCpu; }
      method GetColumns (line 1427) | public string[] GetColumns() { return columns; }
      method Initialize (line 1429) | public void Initialize()
      method Update (line 1439) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1458) | public string GetHelpText()
      method computeMetrics (line 1463) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PmcMonitoringConfig (line 1480) | public class PmcMonitoringConfig : MonitoringConfig
      method GetConfigName (line 1483) | public string GetConfigName() { return "Read the events"; }
      method PmcMonitoringConfig (line 1485) | public PmcMonitoringConfig(Amd17hCpu amdCpu) { cpu = amdCpu; }
      method GetColumns (line 1487) | public string[] GetColumns() { return columns; }
      method Initialize (line 1489) | public void Initialize() { }
      method Update (line 1491) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1533) | public string GetHelpText() { return ""; }
      method computeMetrics (line 1535) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Bulldozer.cs
  class Bulldozer (line 6) | public class Bulldozer : Amd15hCpu
    method Bulldozer (line 8) | public Bulldozer()
    class BpuMonitoringConfig (line 23) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 26) | public string GetConfigName() { return "Branch Prediction"; }
      method BpuMonitoringConfig (line 28) | public BpuMonitoringConfig(Bulldozer amdCpu)
      method GetColumns (line 33) | public string[] GetColumns() { return columns; }
      method Initialize (line 35) | public void Initialize()
      method Update (line 46) | public MonitoringUpdateResults Update()
      method GetHelpText (line 64) | public string GetHelpText()
      method computeMetrics (line 69) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ICMonitoringConfig (line 85) | public class ICMonitoringConfig : MonitoringConfig
      method GetConfigName (line 88) | public string GetConfigName() { return "L1i Cache"; }
      method ICMonitoringConfig (line 90) | public ICMonitoringConfig(Bulldozer amdCpu)
      method GetColumns (line 95) | public string[] GetColumns() { return columns; }
      method Initialize (line 97) | public void Initialize()
      method Update (line 108) | public MonitoringUpdateResults Update()
      method GetHelpText (line 127) | public string GetHelpText()
      method computeMetrics (line 132) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStall (line 151) | public class DispatchStall : MonitoringConfig
      method GetConfigName (line 154) | public string GetConfigName() { return "Dispatch Stall"; }
      method DispatchStall (line 156) | public DispatchStall(Bulldozer amdCpu)
      method GetColumns (line 161) | public string[] GetColumns() { return columns; }
      method Initialize (line 163) | public void Initialize()
      method Update (line 174) | public MonitoringUpdateResults Update()
      method GetHelpText (line 193) | public string GetHelpText()
      method computeMetrics (line 198) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStall1 (line 212) | public class DispatchStall1 : MonitoringConfig
      method GetConfigName (line 215) | public string GetConfigName() { return "Dispatch Stall 1"; }
      method DispatchStall1 (line 217) | public DispatchStall1(Bulldozer amdCpu)
      method GetColumns (line 222) | public string[] GetColumns() { return columns; }
      method Initialize (line 224) | public void Initialize()
      method Update (line 235) | public MonitoringUpdateResults Update()
      method GetHelpText (line 254) | public string GetHelpText()
      method computeMetrics (line 259) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallFP (line 273) | public class DispatchStallFP : MonitoringConfig
      method GetConfigName (line 276) | public string GetConfigName() { return "Dispatch Stall FP"; }
      method DispatchStallFP (line 278) | public DispatchStallFP(Bulldozer amdCpu)
      method GetColumns (line 283) | public string[] GetColumns() { return columns; }
      method Initialize (line 285) | public void Initialize()
      method Update (line 296) | public MonitoringUpdateResults Update()
      method GetHelpText (line 315) | public string GetHelpText()
      method computeMetrics (line 320) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DCMonitoringConfig (line 336) | public class DCMonitoringConfig : MonitoringConfig
      method GetConfigName (line 339) | public string GetConfigName() { return "L1D Cache"; }
      method DCMonitoringConfig (line 341) | public DCMonitoringConfig(Bulldozer amdCpu)
      method GetColumns (line 346) | public string[] GetColumns() { return columns; }
      method Initialize (line 348) | public void Initialize()
      method Update (line 359) | public MonitoringUpdateResults Update()
      method GetHelpText (line 378) | public string GetHelpText()
      method computeMetrics (line 383) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2Cache (line 404) | public class L2Cache : MonitoringConfig
      method GetConfigName (line 407) | public string GetConfigName() { return "L2 Cache"; }
      method L2Cache (line 409) | public L2Cache(Bulldozer amdCpu)
      method GetColumns (line 414) | public string[] GetColumns() { return columns; }
      method Initialize (line 416) | public void Initialize()
      method Update (line 427) | public MonitoringUpdateResults Update()
      method GetHelpText (line 446) | public string GetHelpText()
      method computeMetrics (line 451) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Jaguar.cs
  class Jaguar (line 6) | public class Jaguar : Amd16hCpu
    method Jaguar (line 8) | public Jaguar()
    class BpuMonitoringConfig (line 20) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 23) | public string GetConfigName() { return "Branch Prediction"; }
      method BpuMonitoringConfig (line 25) | public BpuMonitoringConfig(Jaguar amdCpu)
      method GetColumns (line 30) | public string[] GetColumns() { return columns; }
      method Initialize (line 32) | public void Initialize()
      method Update (line 41) | public MonitoringUpdateResults Update()
      method GetHelpText (line 59) | public string GetHelpText()
      method computeMetrics (line 64) | private string[] computeMetrics(string label, NormalizedCounterData ...
    class FPPipes (line 80) | public class FPPipes : MonitoringConfig
      method GetConfigName (line 83) | public string GetConfigName() { return "FP Pipes"; }
      method FPPipes (line 85) | public FPPipes(Jaguar amdCpu)
      method GetColumns (line 90) | public string[] GetColumns() { return columns; }
      method Initialize (line 92) | public void Initialize()
      method Update (line 101) | public MonitoringUpdateResults Update()
      method GetHelpText (line 119) | public string GetHelpText()
      method computeMetrics (line 124) | private string[] computeMetrics(string label, NormalizedCounterData ...
    class IFetch (line 141) | public class IFetch : MonitoringConfig
      method GetConfigName (line 144) | public string GetConfigName() { return "Instruction Fetch"; }
      method IFetch (line 146) | public IFetch(Jaguar amdCpu)
      method GetColumns (line 151) | public string[] GetColumns() { return columns; }
      method Initialize (line 153) | public void Initialize()
      method Update (line 162) | public MonitoringUpdateResults Update()
      method GetHelpText (line 180) | public string GetHelpText()
      method computeMetrics (line 185) | private string[] computeMetrics(string label, NormalizedCounterData ...
    class DCache (line 199) | public class DCache : MonitoringConfig
      method GetConfigName (line 202) | public string GetConfigName() { return "Data Cache"; }
      method DCache (line 204) | public DCache(Jaguar amdCpu)
      method GetColumns (line 209) | public string[] GetColumns() { return columns; }
      method Initialize (line 211) | public void Initialize()
      method Update (line 220) | public MonitoringUpdateResults Update()
      method GetHelpText (line 238) | public string GetHelpText()
      method computeMetrics (line 243) | private string[] computeMetrics(string label, NormalizedCounterData ...
    class DCacheMissLatency (line 257) | public class DCacheMissLatency : MonitoringConfig
      method GetConfigName (line 260) | public string GetConfigName() { return "DC Miss Latency"; }
      method DCacheMissLatency (line 262) | public DCacheMissLatency(Jaguar amdCpu)
      method GetColumns (line 267) | public string[] GetColumns() { return columns; }
      method Initialize (line 269) | public void Initialize()
      method Update (line 278) | public MonitoringUpdateResults Update()
      method GetHelpText (line 296) | public string GetHelpText()
      method computeMetrics (line 301) | private string[] computeMetrics(string label, NormalizedCounterData ...

FILE: pmcreader-plugin/PmcReader/AMD/JaguarL2.cs
  class JaguarL2 (line 6) | public class JaguarL2 : Amd16hCpu
    method JaguarL2 (line 8) | public JaguarL2()
    class L2Config (line 16) | public class L2Config : MonitoringConfig
      method GetConfigName (line 19) | public string GetConfigName() { return "L2 Traffic"; }
      method L2Config (line 21) | public L2Config(JaguarL2 amdCpu)
      method GetColumns (line 26) | public string[] GetColumns() { return columns; }
      method Initialize (line 28) | public void Initialize()
      method Update (line 38) | public MonitoringUpdateResults Update()
      method GetHelpText (line 70) | public string GetHelpText()

FILE: pmcreader-plugin/PmcReader/AMD/JaguarNorthbridge.cs
  class JaguarNorthbridge (line 6) | public class JaguarNorthbridge : Amd16hCpu
    method JaguarNorthbridge (line 8) | public JaguarNorthbridge()
    class XBARConfig (line 17) | public class XBARConfig : MonitoringConfig
      method GetConfigName (line 20) | public string GetConfigName() { return "DCT/XBAR"; }
      method XBARConfig (line 22) | public XBARConfig(JaguarNorthbridge amdCpu)
      method GetColumns (line 27) | public string[] GetColumns() { return columns; }
      method Initialize (line 29) | public void Initialize()
      method Update (line 39) | public MonitoringUpdateResults Update()
      method GetHelpText (line 88) | public string GetHelpText()
    class DRAMConfig (line 94) | public class DRAMConfig : MonitoringConfig
      method GetConfigName (line 97) | public string GetConfigName() { return "DRAM Controllers"; }
      method DRAMConfig (line 99) | public DRAMConfig(JaguarNorthbridge amdCpu)
      method GetColumns (line 104) | public string[] GetColumns() { return columns; }
      method Initialize (line 106) | public void Initialize()
      method Update (line 115) | public MonitoringUpdateResults Update()
      method GetHelpText (line 150) | public string GetHelpText()

FILE: pmcreader-plugin/PmcReader/AMD/K10.cs
  class K10 (line 6) | public class K10 : Amd10hCpu
    method K10 (line 8) | public K10()
    class BpuMonitoringConfig (line 28) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 31) | public string GetConfigName() { return "Branch Prediction"; }
      method BpuMonitoringConfig (line 33) | public BpuMonitoringConfig(K10 amdCpu)
      method GetColumns (line 38) | public string[] GetColumns() { return columns; }
      method Initialize (line 40) | public void Initialize()
      method Update (line 49) | public MonitoringUpdateResults Update()
      method GetHelpText (line 67) | public string GetHelpText()
      method computeMetrics (line 72) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L1iConfig (line 86) | public class L1iConfig : MonitoringConfig
      method GetConfigName (line 89) | public string GetConfigName() { return "L1i Cache"; }
      method L1iConfig (line 91) | public L1iConfig(K10 amdCpu)
      method GetColumns (line 96) | public string[] GetColumns() { return columns; }
      method Initialize (line 98) | public void Initialize()
      method Update (line 107) | public MonitoringUpdateResults Update()
      method GetHelpText (line 125) | public string GetHelpText()
      method computeMetrics (line 130) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L1DConfig (line 144) | public class L1DConfig : MonitoringConfig
      method GetConfigName (line 147) | public string GetConfigName() { return "L1D Cache"; }
      method L1DConfig (line 149) | public L1DConfig(K10 amdCpu)
      method GetColumns (line 154) | public string[] GetColumns() { return columns; }
      method Initialize (line 156) | public void Initialize()
      method Update (line 165) | public MonitoringUpdateResults Update()
      method GetHelpText (line 183) | public string GetHelpText()
      method computeMetrics (line 188) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L1DBW (line 202) | public class L1DBW : MonitoringConfig
      method GetConfigName (line 205) | public string GetConfigName() { return "L1D BW"; }
      method L1DBW (line 207) | public L1DBW(K10 amdCpu)
      method GetColumns (line 212) | public string[] GetColumns() { return columns; }
      method Initialize (line 214) | public void Initialize()
      method Update (line 223) | public MonitoringUpdateResults Update()
      method GetHelpText (line 241) | public string GetHelpText()
      method computeMetrics (line 246) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2Config (line 260) | public class L2Config : MonitoringConfig
      method GetConfigName (line 263) | public string GetConfigName() { return "L2 Cache"; }
      method L2Config (line 265) | public L2Config(K10 amdCpu)
      method GetColumns (line 270) | public string[] GetColumns() { return columns; }
      method Initialize (line 272) | public void Initialize()
      method Update (line 281) | public MonitoringUpdateResults Update()
      method GetHelpText (line 299) | public string GetHelpText()
      method computeMetrics (line 304) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FPUConfig (line 321) | public class FPUConfig : MonitoringConfig
      method GetConfigName (line 324) | public string GetConfigName() { return "FP Pipes"; }
      method FPUConfig (line 326) | public FPUConfig(K10 amdCpu)
      method GetColumns (line 331) | public string[] GetColumns() { return columns; }
      method Initialize (line 333) | public void Initialize()
      method Update (line 342) | public MonitoringUpdateResults Update()
      method GetHelpText (line 360) | public string GetHelpText()
      method computeMetrics (line 365) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class SSEFlops (line 376) | public class SSEFlops : MonitoringConfig
      method GetConfigName (line 379) | public string GetConfigName() { return "SSE FLOPS"; }
      method SSEFlops (line 381) | public SSEFlops(K10 amdCpu)
      method GetColumns (line 386) | public string[] GetColumns() { return columns; }
      method Initialize (line 388) | public void Initialize()
      method Update (line 397) | public MonitoringUpdateResults Update()
      method GetHelpText (line 415) | public string GetHelpText()
      method computeMetrics (line 420) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStalls1 (line 433) | public class DispatchStalls1 : MonitoringConfig
      method GetConfigName (line 436) | public string GetConfigName() { return "Dispatch Stalls"; }
      method DispatchStalls1 (line 438) | public DispatchStalls1(K10 amdCpu)
      method GetColumns (line 443) | public string[] GetColumns() { return columns; }
      method Initialize (line 445) | public void Initialize()
      method Update (line 454) | public MonitoringUpdateResults Update()
      method GetHelpText (line 472) | public string GetHelpText()
      method computeMetrics (line 477) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStalls2 (line 488) | public class DispatchStalls2 : MonitoringConfig
      method GetConfigName (line 491) | public string GetConfigName() { return "Dispatch Stalls 2"; }
      method DispatchStalls2 (line 493) | public DispatchStalls2(K10 amdCpu)
      method GetColumns (line 498) | public string[] GetColumns() { return columns; }
      method Initialize (line 500) | public void Initialize()
      method Update (line 509) | public MonitoringUpdateResults Update()
      method GetHelpText (line 527) | public string GetHelpText()
      method computeMetrics (line 532) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStalls3 (line 543) | public class DispatchStalls3 : MonitoringConfig
      method GetConfigName (line 546) | public string GetConfigName() { return "Dispatch Stalls (Rare)"; }
      method DispatchStalls3 (line 548) | public DispatchStalls3(K10 amdCpu)
      method GetColumns (line 553) | public string[] GetColumns() { return columns; }
      method Initialize (line 555) | public void Initialize()
      method Update (line 564) | public MonitoringUpdateResults Update()
      method GetHelpText (line 582) | public string GetHelpText()
      method computeMetrics (line 587) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class HTConfig (line 598) | public class HTConfig : MonitoringConfig
      method GetConfigName (line 601) | public string GetConfigName() { return "HT Link"; }
      method HTConfig (line 603) | public HTConfig(K10 amdCpu)
      method GetColumns (line 608) | public string[] GetColumns() { return columns; }
      method Initialize (line 610) | public void Initialize()
      method Update (line 619) | public MonitoringUpdateResults Update()
      method GetHelpText (line 638) | public string GetHelpText()
    class DRAMConfig (line 644) | public class DRAMConfig : MonitoringConfig
      method GetConfigName (line 647) | public string GetConfigName() { return "DRAM Controller"; }
      method DRAMConfig (line 649) | public DRAMConfig(K10 amdCpu)
      method GetColumns (line 654) | public string[] GetColumns() { return columns; }
      method Initialize (line 656) | public void Initialize()
      method Update (line 665) | public MonitoringUpdateResults Update()
      method GetHelpText (line 695) | public string GetHelpText()
    class L3Config (line 701) | public class L3Config : MonitoringConfig
      method GetConfigName (line 704) | public string GetConfigName() { return "L3 Cache"; }
      method L3Config (line 706) | public L3Config(K10 amdCpu)
      method GetColumns (line 711) | public string[] GetColumns() { return columns; }
      method Initialize (line 713) | public void Initialize()
      method Update (line 738) | public MonitoringUpdateResults Update()
      method GetHelpText (line 764) | public string GetHelpText()

FILE: pmcreader-plugin/PmcReader/AMD/Piledriver.cs
  class Piledriver (line 7) | public class Piledriver : Amd15hCpu
    method Piledriver (line 9) | public Piledriver()
    class BpuMonitoringConfig (line 27) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 30) | public string GetConfigName() { return "Branch Prediction"; }
      method BpuMonitoringConfig (line 32) | public BpuMonitoringConfig(Piledriver amdCpu)
      method GetColumns (line 37) | public string[] GetColumns() { return columns; }
      method Initialize (line 39) | public void Initialize()
      method Update (line 50) | public MonitoringUpdateResults Update()
      method GetHelpText (line 68) | public string GetHelpText()
      method computeMetrics (line 73) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class IFetch (line 89) | public class IFetch : MonitoringConfig
      method GetConfigName (line 92) | public string GetConfigName() { return "L1i Cache"; }
      method IFetch (line 94) | public IFetch(Piledriver amdCpu)
      method GetColumns (line 99) | public string[] GetColumns() { return columns; }
      method Initialize (line 101) | public void Initialize()
      method Update (line 112) | public MonitoringUpdateResults Update()
      method GetHelpText (line 131) | public string GetHelpText()
      method computeMetrics (line 136) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DataCache (line 159) | public class DataCache : MonitoringConfig
      method GetConfigName (line 162) | public string GetConfigName() { return "L1D Cache"; }
      method DataCache (line 164) | public DataCache(Piledriver amdCpu)
      method GetColumns (line 169) | public string[] GetColumns() { return columns; }
      method Initialize (line 171) | public void Initialize()
      method Update (line 182) | public MonitoringUpdateResults Update()
      method GetHelpText (line 201) | public string GetHelpText()
      method computeMetrics (line 206) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DataCache1 (line 226) | public class DataCache1 : MonitoringConfig
      method GetConfigName (line 229) | public string GetConfigName() { return "L1D Activity"; }
      method DataCache1 (line 231) | public DataCache1(Piledriver amdCpu)
      method GetColumns (line 236) | public string[] GetColumns() { return columns; }
      method Initialize (line 238) | public void Initialize()
      method Update (line 249) | public MonitoringUpdateResults Update()
      method GetHelpText (line 268) | public string GetHelpText()
      method computeMetrics (line 273) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2Cache (line 292) | public class L2Cache : MonitoringConfig
      method GetConfigName (line 295) | public string GetConfigName() { return "L2 Cache, more LS"; }
      method L2Cache (line 297) | public L2Cache(Piledriver amdCpu)
      method GetColumns (line 302) | public string[] GetColumns() { return columns; }
      method Initialize (line 304) | public void Initialize()
      method Update (line 315) | public MonitoringUpdateResults Update()
      method GetHelpText (line 334) | public string GetHelpText()
      method computeMetrics (line 339) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStall (line 356) | public class DispatchStall : MonitoringConfig
      method GetConfigName (line 359) | public string GetConfigName() { return "Dispatch Stall"; }
      method DispatchStall (line 361) | public DispatchStall(Piledriver amdCpu)
      method GetColumns (line 366) | public string[] GetColumns() { return columns; }
      method Initialize (line 368) | public void Initialize()
      method Update (line 379) | public MonitoringUpdateResults Update()
      method GetHelpText (line 398) | public string GetHelpText()
      method computeMetrics (line 403) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStall1 (line 419) | public class DispatchStall1 : MonitoringConfig
      method GetConfigName (line 422) | public string GetConfigName() { return "Dispatch Stall 1"; }
      method DispatchStall1 (line 424) | public DispatchStall1(Piledriver amdCpu)
      method GetColumns (line 429) | public string[] GetColumns() { return columns; }
      method Initialize (line 431) | public void Initialize()
      method Update (line 442) | public MonitoringUpdateResults Update()
      method GetHelpText (line 461) | public string GetHelpText()
      method computeMetrics (line 466) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallFP (line 482) | public class DispatchStallFP : MonitoringConfig
      method GetConfigName (line 485) | public string GetConfigName() { return "Dispatch Stall FP"; }
      method DispatchStallFP (line 487) | public DispatchStallFP(Piledriver amdCpu)
      method GetColumns (line 492) | public string[] GetColumns() { return columns; }
      method Initialize (line 494) | public void Initialize()
      method Update (line 505) | public MonitoringUpdateResults Update()
      method GetHelpText (line 524) | public string GetHelpText()
      method computeMetrics (line 529) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallMisc (line 546) | public class DispatchStallMisc : MonitoringConfig
      method GetConfigName (line 549) | public string GetConfigName() { return "Dispatch Stall Misc"; }
      method DispatchStallMisc (line 551) | public DispatchStallMisc(Piledriver amdCpu)
      method GetColumns (line 556) | public string[] GetColumns() { return columns; }
      method Initialize (line 558) | public void Initialize()
      method Update (line 569) | public MonitoringUpdateResults Update()
      method GetHelpText (line 593) | public string GetHelpText()
      method computeMetrics (line 598) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DTLB (line 614) | public class DTLB : MonitoringConfig
      method GetConfigName (line 617) | public string GetConfigName() { return "DTLB"; }
      method DTLB (line 619) | public DTLB(Piledriver amdCpu)
      method GetColumns (line 624) | public string[] GetColumns() { return columns; }
      method Initialize (line 626) | public void Initialize()
      method Update (line 637) | public MonitoringUpdateResults Update()
      method GetHelpText (line 656) | public string GetHelpText()
      method computeMetrics (line 661) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Offcore (line 677) | public class Offcore : MonitoringConfig
      method GetConfigName (line 680) | public string GetConfigName() { return "Off-Module Transfers"; }
      method Offcore (line 682) | public Offcore(Piledriver amdCpu)
      method GetColumns (line 687) | public string[] GetColumns() { return columns; }
      method Initialize (line 689) | public void Initialize()
      method Update (line 700) | public MonitoringUpdateResults Update()
      method GetHelpText (line 719) | public string GetHelpText()
      method computeMetrics (line 724) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/PiledriverNorthbridge.cs
  class PiledriverNorthbridge (line 7) | public class PiledriverNorthbridge : Amd15hCpu
    method PiledriverNorthbridge (line 11) | public PiledriverNorthbridge()
    method ProgramPerfCounters (line 28) | private void ProgramPerfCounters(ulong ctr0, ulong ctr1, ulong ctr2, u...
    method UpdateNbPerfCounterData (line 44) | private NormalizedNbCounterData UpdateNbPerfCounterData()
    method GetOverallCounterValues (line 65) | private Tuple<string, float>[] GetOverallCounterValues(NormalizedNbCou...
    class NormalizedNbCounterData (line 75) | public class NormalizedNbCounterData
    class MemBwConfig (line 93) | public class MemBwConfig : MonitoringConfig
      method GetHelpText (line 98) | public string GetHelpText() { return ""; }
      method MemBwConfig (line 99) | public MemBwConfig(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 104) | public string GetConfigName() { return "Memory Bandwidth"; }
      method GetColumns (line 105) | public string[] GetColumns() { return columns; }
      method Initialize (line 106) | public void Initialize()
      method Update (line 115) | public MonitoringUpdateResults Update()
    class MemSubtimings (line 150) | public class MemSubtimings : MonitoringConfig
      method GetHelpText (line 155) | public string GetHelpText() { return ""; }
      method MemSubtimings (line 156) | public MemSubtimings(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 161) | public string GetConfigName() { return "Memory Subtimings"; }
      method GetColumns (line 162) | public string[] GetColumns() { return columns; }
      method Initialize (line 163) | public void Initialize()
      method Update (line 172) | public MonitoringUpdateResults Update()
    class MemSource (line 191) | public class MemSource : MonitoringConfig
      method GetHelpText (line 196) | public string GetHelpText() { return ""; }
      method MemSource (line 197) | public MemSource(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 202) | public string GetConfigName() { return "Crossbar/DRAM"; }
      method GetColumns (line 203) | public string[] GetColumns() { return columns; }
      method Initialize (line 204) | public void Initialize()
      method Update (line 213) | public MonitoringUpdateResults Update()
    class L3Config (line 235) | public class L3Config : MonitoringConfig
      method GetHelpText (line 240) | public string GetHelpText() { return ""; }
      method L3Config (line 241) | public L3Config(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 246) | public string GetConfigName() { return "L3 Cache"; }
      method GetColumns (line 247) | public string[] GetColumns() { return columns; }
      method Initialize (line 248) | public void Initialize()
      method Update (line 257) | public MonitoringUpdateResults Update()
    class L3Commands (line 280) | public class L3Commands : MonitoringConfig
      method GetHelpText (line 285) | public string GetHelpText() { return ""; }
      method L3Commands (line 286) | public L3Commands(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 291) | public string GetConfigName() { return "Cache Block Commands"; }
      method GetColumns (line 292) | public string[] GetColumns() { return columns; }
      method Initialize (line 293) | public void Initialize()
      method Update (line 302) | public MonitoringUpdateResults Update()
    class CrossbarRequests (line 321) | public class CrossbarRequests : MonitoringConfig
      method GetHelpText (line 326) | public string GetHelpText() { return ""; }
      method CrossbarRequests (line 327) | public CrossbarRequests(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 332) | public string GetConfigName() { return "Crossbar Requests"; }
      method GetColumns (line 333) | public string[] GetColumns() { return columns; }
      method Initialize (line 334) | public void Initialize()
      method Update (line 343) | public MonitoringUpdateResults Update()
    class SriCommands (line 362) | public class SriCommands : MonitoringConfig
      method GetHelpText (line 367) | public string GetHelpText() { return ""; }
      method SriCommands (line 368) | public SriCommands(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 373) | public string GetConfigName() { return "System Request Interface"; }
      method GetColumns (line 374) | public string[] GetColumns() { return columns; }
      method Initialize (line 375) | public void Initialize()
      method Update (line 384) | public MonitoringUpdateResults Update()
    class Probe (line 402) | public class Probe : MonitoringConfig
      method GetHelpText (line 407) | public string GetHelpText() { return ""; }
      method Probe (line 408) | public Probe(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 413) | public string GetConfigName() { return "Probe Response"; }
      method GetColumns (line 414) | public string[] GetColumns() { return columns; }
      method Initialize (line 415) | public void Initialize()
      method Update (line 424) | public MonitoringUpdateResults Update()
    class UpstreamRequests (line 443) | public class UpstreamRequests : MonitoringConfig
      method GetHelpText (line 448) | public string GetHelpText() { return ""; }
      method UpstreamRequests (line 449) | public UpstreamRequests(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 454) | public string GetConfigName() { return "Upstream Requsets"; }
      method GetColumns (line 455) | public string[] GetColumns() { return columns; }
      method Initialize (line 456) | public void Initialize()
      method Update (line 465) | public MonitoringUpdateResults Update()
    class GartConfig (line 484) | public class GartConfig : MonitoringConfig
      method GetHelpText (line 488) | public string GetHelpText() { return ""; }
      method GartConfig (line 489) | public GartConfig(PiledriverNorthbridge dataFabric)
      method GetConfigName (line 494) | public string GetConfigName() { return "Graphics Addr Remap Table"; }
      method GetColumns (line 495) | public string[] GetColumns() { return columns; }
      method Initialize (line 496) | public void Initialize()
      method Update (line 507) | public MonitoringUpdateResults Update()

FILE: pmcreader-plugin/PmcReader/AMD/Zen.cs
  class Zen (line 7) | public class Zen : Amd17hCpu
    method Zen (line 9) | public Zen()
    class BpuMonitoringConfig (line 16) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 19) | public string GetConfigName() { return "Branch Prediction and Fusion...
      method BpuMonitoringConfig (line 21) | public BpuMonitoringConfig(Zen amdCpu)
      method GetColumns (line 26) | public string[] GetColumns()
      method Initialize (line 31) | public void Initialize()
      method Update (line 57) | public MonitoringUpdateResults Update()
      method GetHelpText (line 75) | public string GetHelpText()
      method computeMetrics (line 80) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen1.cs
  class Zen1 (line 7) | public class Zen1 : Amd17hCpu
    method Zen1 (line 9) | public Zen1()
    class BpuMonitoringConfig (line 21) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 24) | public string GetConfigName() { return "Branch Prediction and Fusion...
      method BpuMonitoringConfig (line 26) | public BpuMonitoringConfig(Zen1 amdCpu)
      method GetColumns (line 31) | public string[] GetColumns()
      method Initialize (line 36) | public void Initialize()
      method Update (line 62) | public MonitoringUpdateResults Update()
      method GetHelpText (line 82) | public string GetHelpText()
      method computeMetrics (line 87) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DCMonitoringConfig (line 109) | public class DCMonitoringConfig : MonitoringConfig
      method GetConfigName (line 112) | public string GetConfigName() { return "DC Refills"; }
      method DCMonitoringConfig (line 114) | public DCMonitoringConfig(Zen1 amdCpu)
      method GetColumns (line 119) | public string[] GetColumns()
      method Initialize (line 124) | public void Initialize()
      method Update (line 150) | public MonitoringUpdateResults Update()
      method GetHelpText (line 168) | public string GetHelpText()
      method computeMetrics (line 173) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FPUPipeUtil (line 188) | public class FPUPipeUtil : MonitoringConfig
      method GetConfigName (line 191) | public string GetConfigName() { return "FPU Pipes"; }
      method FPUPipeUtil (line 193) | public FPUPipeUtil(Zen1 amdCpu)
      method GetColumns (line 198) | public string[] GetColumns()
      method Initialize (line 203) | public void Initialize()
      method Update (line 213) | public MonitoringUpdateResults Update()
      method GetHelpText (line 233) | public string GetHelpText()
      method computeMetrics (line 238) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Dispatch1 (line 254) | public class Dispatch1 : MonitoringConfig
      method GetConfigName (line 257) | public string GetConfigName() { return "Dispatch Stall 1"; }
      method Dispatch1 (line 259) | public Dispatch1(Zen1 amdCpu)
      method GetColumns (line 264) | public string[] GetColumns()
      method Initialize (line 269) | public void Initialize()
      method Update (line 279) | public MonitoringUpdateResults Update()
      method GetHelpText (line 299) | public string GetHelpText()
      method computeMetrics (line 304) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Dispatch2 (line 320) | public class Dispatch2 : MonitoringConfig
      method GetConfigName (line 323) | public string GetConfigName() { return "Dispatch Stall 2"; }
      method Dispatch2 (line 325) | public Dispatch2(Zen1 amdCpu)
      method GetColumns (line 330) | public string[] GetColumns()
      method Initialize (line 335) | public void Initialize()
      method Update (line 345) | public MonitoringUpdateResults Update()
      method GetHelpText (line 365) | public string GetHelpText()
      method computeMetrics (line 370) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class OpCache (line 386) | public class OpCache : MonitoringConfig
      method GetConfigName (line 389) | public string GetConfigName() { return "IFetch, Op Cache"; }
      method OpCache (line 391) | public OpCache(Zen1 amdCpu)
      method GetColumns (line 396) | public string[] GetColumns()
      method Initialize (line 401) | public void Initialize()
      method Update (line 411) | public MonitoringUpdateResults Update()
      method GetHelpText (line 431) | public string GetHelpText()
      method computeMetrics (line 436) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen2.cs
  class Zen2 (line 8) | public class Zen2 : Amd17hCpu
    method Zen2 (line 10) | public Zen2()
    class OpCacheConfig (line 47) | public class OpCacheConfig : MonitoringConfig
      method GetConfigName (line 50) | public string GetConfigName() { return "Decode/Op Cache"; }
      method OpCacheConfig (line 52) | public OpCacheConfig(Zen2 amdCpu)
      method GetColumns (line 57) | public string[] GetColumns()
      method Initialize (line 62) | public void Initialize()
      method Update (line 88) | public MonitoringUpdateResults Update()
      method GetHelpText (line 107) | public string GetHelpText()
      method computeMetrics (line 115) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class TopDownConfig (line 136) | public class TopDownConfig : MonitoringConfig
      method GetConfigName (line 139) | public string GetConfigName() { return "Top Down?"; }
      method TopDownConfig (line 141) | public TopDownConfig(Zen2 amdCpu)
      method GetColumns (line 146) | public string[] GetColumns()
      method Initialize (line 151) | public void Initialize()
      method Update (line 177) | public MonitoringUpdateResults Update()
      method GetHelpText (line 197) | public string GetHelpText()
      method computeMetrics (line 202) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class BpuMonitoringConfig (line 219) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 222) | public string GetConfigName() { return "Branch Prediction and Fusion...
      method BpuMonitoringConfig (line 224) | public BpuMonitoringConfig(Zen2 amdCpu)
      method GetColumns (line 229) | public string[] GetColumns()
      method Initialize (line 234) | public void Initialize()
      method Update (line 244) | public MonitoringUpdateResults Update()
      method GetHelpText (line 262) | public string GetHelpText()
      method computeMetrics (line 273) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FlopsMonitoringConfig (line 289) | public class FlopsMonitoringConfig : MonitoringConfig
      method GetConfigName (line 292) | public string GetConfigName() { return "Floppy Flops"; }
      method FlopsMonitoringConfig (line 295) | public FlopsMonitoringConfig(Zen2 amdCpu)
      method GetColumns (line 300) | public string[] GetColumns()
      method GetHelpText (line 305) | public string GetHelpText()
      method Initialize (line 313) | public void Initialize()
      method Update (line 349) | public MonitoringUpdateResults Update()
      method computeMetrics (line 365) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ResourceStallMontitoringConfig (line 381) | public class ResourceStallMontitoringConfig : MonitoringConfig
      method GetConfigName (line 384) | public string GetConfigName() { return "Dispatch Stalls"; }
      method ResourceStallMontitoringConfig (line 386) | public ResourceStallMontitoringConfig(Zen2 amdCpu)
      method GetColumns (line 391) | public string[] GetColumns()
      method Initialize (line 396) | public void Initialize()
      method Update (line 423) | public MonitoringUpdateResults Update()
      method GetHelpText (line 441) | public string GetHelpText()
      method computeMetrics (line 452) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class IntSchedulerMonitoringConfig (line 468) | public class IntSchedulerMonitoringConfig : MonitoringConfig
      method GetConfigName (line 471) | public string GetConfigName() { return "Dispatch Stalls 1 (Int Sched...
      method IntSchedulerMonitoringConfig (line 473) | public IntSchedulerMonitoringConfig(Zen2 amdCpu)
      method GetColumns (line 478) | public string[] GetColumns()
      method Initialize (line 483) | public void Initialize()
      method GetHelpText (line 518) | public string GetHelpText()
      method Update (line 528) | public MonitoringUpdateResults Update()
      method computeMetrics (line 544) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2MonitoringConfig (line 559) | public class L2MonitoringConfig : MonitoringConfig
      method GetConfigName (line 562) | public string GetConfigName() { return "L2 Cache"; }
      method L2MonitoringConfig (line 564) | public L2MonitoringConfig(Zen2 amdCpu)
      method GetColumns (line 569) | public string[] GetColumns()
      method Initialize (line 574) | public void Initialize()
      method Update (line 596) | public MonitoringUpdateResults Update()
      method GetHelpText (line 614) | public string GetHelpText()
      method computeMetrics (line 623) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DCFillSource (line 654) | public class DCFillSource : MonitoringConfig
      method GetConfigName (line 659) | public string GetConfigName() { return cfgName; }
      method DCFillSource (line 661) | public DCFillSource(Zen2 amdCpu, string name, byte evt)
      method GetColumns (line 668) | public string[] GetColumns()
      method Initialize (line 673) | public void Initialize()
      method Update (line 697) | public MonitoringUpdateResults Update()
      method GetHelpText (line 716) | public string GetHelpText()
      method computeMetrics (line 725) | public string[] computeMetrics(string label, NormalizedCoreCounterDa...
    class DCFillLatencyConfig (line 758) | public class DCFillLatencyConfig : MonitoringConfig
      method GetConfigName (line 761) | public string GetConfigName() { return "L1D Fill Latency"; }
      method DCFillLatencyConfig (line 763) | public DCFillLatencyConfig(Zen2 amdCpu)
      method GetColumns (line 768) | public string[] GetColumns()
      method Initialize (line 773) | public void Initialize()
      method Update (line 795) | public MonitoringUpdateResults Update()
      method GetHelpText (line 813) | public string GetHelpText()
      method computeMetrics (line 818) | public string[] computeMetrics(string label, NormalizedCoreCounterDa...
    class MABOccupancyConfig (line 836) | public class MABOccupancyConfig : MonitoringConfig
      method GetConfigName (line 839) | public string GetConfigName() { return "MAB Occupancy"; }
      method MABOccupancyConfig (line 841) | public MABOccupancyConfig(Zen2 amdCpu)
      method GetColumns (line 846) | public string[] GetColumns()
      method Initialize (line 851) | public void Initialize()
      method Update (line 872) | public MonitoringUpdateResults Update()
      method GetHelpText (line 890) | public string GetHelpText()
      method computeMetrics (line 895) | public string[] computeMetrics(string label, NormalizedCoreCounterDa...
    class DCBWMonitoringConfig (line 908) | public class DCBWMonitoringConfig : MonitoringConfig
      method GetConfigName (line 911) | public string GetConfigName() { return "L1D BW"; }
      method DCBWMonitoringConfig (line 913) | public DCBWMonitoringConfig(Zen2 amdCpu)
      method GetColumns (line 918) | public string[] GetColumns()
      method Initialize (line 923) | public void Initialize()
      method Update (line 933) | public MonitoringUpdateResults Update()
      method GetHelpText (line 953) | public string GetHelpText()
      method computeMetrics (line 958) | public string[] computeMetrics(string label, NormalizedCoreCounterDa...
    class ICMonitoringConfig (line 983) | public class ICMonitoringConfig : MonitoringConfig
      method GetConfigName (line 986) | public string GetConfigName() { return "Instruction Fetch"; }
      method ICMonitoringConfig (line 988) | public ICMonitoringConfig(Zen2 amdCpu)
      method GetColumns (line 993) | public string[] GetColumns()
      method Initialize (line 998) | public void Initialize()
      method Update (line 1020) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1038) | public string GetHelpText()
      method computeMetrics (line 1043) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class BPUMonitoringConfig1 (line 1076) | public class BPUMonitoringConfig1 : MonitoringConfig
      method GetConfigName (line 1079) | public string GetConfigName() { return "Branch Prediction 1"; }
      method BPUMonitoringConfig1 (line 1081) | public BPUMonitoringConfig1(Zen2 amdCpu)
      method GetColumns (line 1086) | public string[] GetColumns()
      method Initialize (line 1091) | public void Initialize()
      method Update (line 1112) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1130) | public string GetHelpText()
      method computeMetrics (line 1138) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PageWalkConfig (line 1155) | public class PageWalkConfig : MonitoringConfig
      method GetConfigName (line 1158) | public string GetConfigName() { return "Page Walk"; }
      method PageWalkConfig (line 1160) | public PageWalkConfig(Zen2 amdCpu)
      method GetColumns (line 1165) | public string[] GetColumns()
      method Initialize (line 1170) | public void Initialize()
      method Update (line 1191) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1209) | public string GetHelpText()
      method computeMetrics (line 1214) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DtlbConfig (line 1234) | public class DtlbConfig : MonitoringConfig
      method GetConfigName (line 1237) | public string GetConfigName() { return "DTLB"; }
      method DtlbConfig (line 1239) | public DtlbConfig(Zen2 amdCpu)
      method GetColumns (line 1244) | public string[] GetColumns()
      method Initialize (line 1249) | public void Initialize()
      method Update (line 1270) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1288) | public string GetHelpText()
      method computeMetrics (line 1293) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class TestConfig (line 1314) | public class TestConfig : MonitoringConfig
      method GetConfigName (line 1317) | public string GetConfigName() { return "Testing"; }
      method TestConfig (line 1319) | public TestConfig(Zen2 amdCpu)
      method GetColumns (line 1324) | public string[] GetColumns()
      method Initialize (line 1329) | public void Initialize()
      method Update (line 1350) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1369) | public string GetHelpText() { return "FP pipe utilization events are...
      method computeMetrics (line 1371) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2Latency (line 1396) | public class L2Latency : MonitoringConfig
      method GetConfigName (line 1399) | public string GetConfigName() { return "L2 Miss Latency"; }
      method L2Latency (line 1401) | public L2Latency(Zen2 amdCpu)
      method GetColumns (line 1406) | public string[] GetColumns()
      method Initialize (line 1411) | public void Initialize()
      method Update (line 1427) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1465) | public string GetHelpText() { return "FP pipe utilization events are...
      method computeMetrics (line 1467) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class MiscConfig (line 1492) | public class MiscConfig : MonitoringConfig
      method GetConfigName (line 1495) | public string GetConfigName() { return "Misc"; }
      method MiscConfig (line 1497) | public MiscConfig(Zen2 amdCpu)
      method GetColumns (line 1502) | public string[] GetColumns()
      method Initialize (line 1507) | public void Initialize()
      method Update (line 1528) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1546) | public string GetHelpText() { return "Not brrrr"; }
      method computeMetrics (line 1548) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class RetireConfig (line 1575) | public class RetireConfig : MonitoringConfig
      method GetConfigName (line 1578) | public string GetConfigName() { return "Retire Histogram"; }
      method RetireConfig (line 1580) | public RetireConfig(Zen2 amdCpu)
      method GetColumns (line 1585) | public string[] GetColumns()
      method Initialize (line 1590) | public void Initialize()
      method Update (line 1611) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1629) | public string GetHelpText() { return ""; }
      method computeMetrics (line 1631) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class RetireBurstConfig (line 1647) | public class RetireBurstConfig : MonitoringConfig
      method GetConfigName (line 1650) | public string GetConfigName() { return "Retire (Burst)"; }
      method RetireBurstConfig (line 1652) | public RetireBurstConfig(Zen2 amdCpu)
      method GetColumns (line 1657) | public string[] GetColumns()
      method Initialize (line 1662) | public void Initialize()
      method Update (line 1683) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1700) | public string GetHelpText() { return ""; }
      method computeMetrics (line 1702) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DecodeHistogram (line 1718) | public class DecodeHistogram : MonitoringConfig
      method GetConfigName (line 1721) | public string GetConfigName() { return "Decoder Histogram"; }
      method DecodeHistogram (line 1723) | public DecodeHistogram(Zen2 amdCpu)
      method GetColumns (line 1728) | public string[] GetColumns()
      method Initialize (line 1733) | public void Initialize()
      method Update (line 1754) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1772) | public string GetHelpText() { return "In theory the decoder can deli...
      method computeMetrics (line 1774) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LSConfig (line 1797) | public class LSConfig : MonitoringConfig
      method GetConfigName (line 1800) | public string GetConfigName() { return "Load/Store Unit"; }
      method LSConfig (line 1802) | public LSConfig(Zen2 amdCpu)
      method GetColumns (line 1807) | public string[] GetColumns()
      method Initialize (line 1812) | public void Initialize()
      method Update (line 1833) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1851) | public string GetHelpText()
      method computeMetrics (line 1859) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LSSwPrefetch (line 1875) | public class LSSwPrefetch : MonitoringConfig
      method GetConfigName (line 1878) | public string GetConfigName() { return "Software Prefetch"; }
      method LSSwPrefetch (line 1880) | public LSSwPrefetch(Zen2 amdCpu)
      method GetColumns (line 1885) | public string[] GetColumns()
      method Initialize (line 1890) | public void Initialize()
      method Update (line 1911) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1929) | public string GetHelpText()
      method computeMetrics (line 1935) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PowerConfig (line 1952) | public class PowerConfig : MonitoringConfig
      method GetConfigName (line 1955) | public string GetConfigName() { return "Power Efficiency"; }
      method PowerConfig (line 1957) | public PowerConfig(Zen2 amdCpu)
      method GetColumns (line 1962) | public string[] GetColumns()
      method Initialize (line 1967) | public void Initialize()
      method Update (line 1988) | public MonitoringUpdateResults Update()
      method GetHelpText (line 2006) | public string GetHelpText()
      method computeMetrics (line 2012) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Locks (line 2036) | public class Locks : MonitoringConfig
      method GetConfigName (line 2039) | public string GetConfigName() { return "Locks"; }
      method Locks (line 2041) | public Locks(Zen2 amdCpu)
      method GetColumns (line 2046) | public string[] GetColumns()
      method Initialize (line 2051) | public void Initialize()
      method Update (line 2072) | public MonitoringUpdateResults Update()
      method GetHelpText (line 2090) | public string GetHelpText()
      method computeMetrics (line 2095) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FpDispFault (line 2111) | public class FpDispFault : MonitoringConfig
      method GetConfigName (line 2114) | public string GetConfigName() { return "FP Dispatch Faults"; }
      method FpDispFault (line 2116) | public FpDispFault(Zen2 amdCpu)
      method GetColumns (line 2121) | public string[] GetColumns()
      method Initialize (line 2126) | public void Initialize()
      method Update (line 2147) | public MonitoringUpdateResults Update()
      method GetHelpText (line 2165) | public string GetHelpText()
      method computeMetrics (line 2170) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen2DataFabric.cs
  class Zen2DataFabric (line 7) | public class Zen2DataFabric : Amd17hCpu
    type DfType (line 9) | public enum DfType
    method Zen2DataFabric (line 15) | public Zen2DataFabric(DfType dfType)
    class TrDramBwConfig (line 26) | public class TrDramBwConfig : MonitoringConfig
      method GetHelpText (line 33) | public string GetHelpText() { return ""; }
      method TrDramBwConfig (line 34) | public TrDramBwConfig(Zen2DataFabric dataFabric)
      method GetConfigName (line 39) | public string GetConfigName() { return "TR DRAM Bandwidth?"; }
      method GetColumns (line 40) | public string[] GetColumns() { return columns; }
      method Initialize (line 41) | public void Initialize()
      method Update (line 67) | public MonitoringUpdateResults Update()
    class ClientBwConfig (line 89) | public class ClientBwConfig : MonitoringConfig
      method GetHelpText (line 97) | public string GetHelpText() { return ""; }
      method ClientBwConfig (line 98) | public ClientBwConfig(Zen2DataFabric dataFabric)
      method GetConfigName (line 103) | public string GetConfigName() { return "MTS/RNR DRAM Bandwidth??"; }
      method GetColumns (line 104) | public string[] GetColumns() { return columns; }
      method Initialize (line 105) | public void Initialize()
      method Update (line 136) | public MonitoringUpdateResults Update()
    class Zen2DfTest (line 175) | public class Zen2DfTest : MonitoringConfig
      method GetHelpText (line 182) | public string GetHelpText() { return ""; }
      method Zen2DfTest (line 183) | public Zen2DfTest(Zen2DataFabric dataFabric)
      method GetConfigName (line 188) | public string GetConfigName() { return "DF Test"; }
      method GetColumns (line 189) | public string[] GetColumns() { return columns; }
      method Initialize (line 190) | public void Initialize()
      method Update (line 209) | public MonitoringUpdateResults Update()
    class OutboundDataConfig (line 231) | public class OutboundDataConfig : MonitoringConfig
      method GetHelpText (line 238) | public string GetHelpText() { return ""; }
      method OutboundDataConfig (line 239) | public OutboundDataConfig(Zen2DataFabric dataFabric)
      method GetConfigName (line 244) | public string GetConfigName() { return "Remote Outbound Data???"; }
      method GetColumns (line 245) | public string[] GetColumns() { return columns; }
      method Initialize (line 246) | public void Initialize()
      method Update (line 263) | public MonitoringUpdateResults Update()

FILE: pmcreader-plugin/PmcReader/AMD/Zen2L3Cache.cs
  class Zen2L3Cache (line 8) | public class Zen2L3Cache : Amd17hCpu
    method Zen2L3Cache (line 16) | public Zen2L3Cache()
    class L3CounterData (line 51) | public class L3CounterData
    method ClearTotals (line 61) | public void ClearTotals()
    method UpdateCcxL3CounterData (line 71) | public void UpdateCcxL3CounterData(int ccxIdx, int threadIdx)
    method GetOverallL3CounterValues (line 97) | public Tuple<string, float>[] GetOverallL3CounterValues(ulong aperf, u...
    method GetOverallL3CounterValuesPerCCX (line 128) | public Tuple<string, float>[] GetOverallL3CounterValuesPerCCX(ulong ap...
    class HitRateLatencyConfig (line 150) | public class HitRateLatencyConfig : MonitoringConfig
      method HitRateLatencyConfig (line 154) | public HitRateLatencyConfig(Zen2L3Cache l3Cache)
      method GetConfigName (line 159) | public string GetConfigName() { return "Hitrate and Miss Latency"; }
      method GetColumns (line 160) | public string[] GetColumns() { return columns; }
      method Initialize (line 161) | public void Initialize()
      method Update (line 178) | public MonitoringUpdateResults Update()
      method GetHelpText (line 219) | public string GetHelpText() { return ""; }
      method computeMetrics (line 221) | private string[] computeMetrics(string label, L3CounterData counterD...
    class SliceConfig (line 239) | public class SliceConfig : MonitoringConfig
      method SliceConfig (line 243) | public SliceConfig(Zen2L3Cache l3Cache)
      method GetConfigName (line 248) | public string GetConfigName() { return "By the Slice"; }
      method GetColumns (line 249) | public string[] GetColumns() { return columns; }
      method Initialize (line 250) | public void Initialize()
      method Update (line 271) | public MonitoringUpdateResults Update()
      method GetHelpText (line 288) | public string GetHelpText() { return ""; }
      method computeMetrics (line 290) | private string[] computeMetrics(string label, L3CounterData counterD...
    class TestConfig (line 304) | public class TestConfig : MonitoringConfig
      method TestConfig (line 308) | public TestConfig(Zen2L3Cache l3Cache)
      method GetConfigName (line 313) | public string GetConfigName() { return "L3 Victim State"; }
      method GetColumns (line 314) | public string[] GetColumns() { return columns; }
      method Initialize (line 315) | public void Initialize()
      method Update (line 334) | public MonitoringUpdateResults Update()
      method GetHelpText (line 351) | public string GetHelpText() { return ""; }
      method computeMetrics (line 353) | private string[] computeMetrics(string label, L3CounterData counterD...
    class L3AccessConfig (line 366) | public class L3AccessConfig : MonitoringConfig
      method L3AccessConfig (line 370) | public L3AccessConfig(Zen2L3Cache l3Cache)
      method GetConfigName (line 375) | public string GetConfigName() { return "L3 Access Types"; }
      method GetColumns (line 376) | public string[] GetColumns() { return columns; }
      method Initialize (line 377) | public void Initialize()
      method Update (line 395) | public MonitoringUpdateResults Update()
      method GetHelpText (line 412) | public string GetHelpText() { return ""; }
      method computeMetrics (line 414) | private string[] computeMetrics(string label, L3CounterData counterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen3.cs
  class Zen3 (line 6) | public class Zen3 : Amd17hCpu
    method Zen3 (line 8) | public Zen3()
    class BpuMonitoringConfig (line 26) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 29) | public string GetConfigName() { return "Branch Prediction"; }
      method BpuMonitoringConfig (line 31) | public BpuMonitoringConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 33) | public string[] GetColumns() { return columns; }
      method Initialize (line 35) | public void Initialize()
      method Update (line 45) | public MonitoringUpdateResults Update()
      method GetHelpText (line 63) | public string GetHelpText()
      method computeMetrics (line 68) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FlopsConfig (line 84) | public class FlopsConfig : MonitoringConfig
      method GetConfigName (line 87) | public string GetConfigName() { return "FLOPs"; }
      method FlopsConfig (line 89) | public FlopsConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 91) | public string[] GetColumns() { return columns; }
      method Initialize (line 93) | public void Initialize()
      method Update (line 101) | public MonitoringUpdateResults Update()
      method GetHelpText (line 119) | public string GetHelpText()
      method computeMetrics (line 124) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FetchConfig (line 136) | public class FetchConfig : MonitoringConfig
      method GetConfigName (line 139) | public string GetConfigName() { return "Instruction Fetch"; }
      method FetchConfig (line 141) | public FetchConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 143) | public string[] GetColumns() { return columns; }
      method Initialize (line 145) | public void Initialize()
      method Update (line 155) | public MonitoringUpdateResults Update()
      method GetHelpText (line 173) | public string GetHelpText()
      method computeMetrics (line 178) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LocksConfig (line 194) | public class LocksConfig : MonitoringConfig
      method GetConfigName (line 197) | public string GetConfigName() { return "LS Locks"; }
      method LocksConfig (line 199) | public LocksConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 201) | public string[] GetColumns() { return columns; }
      method Initialize (line 203) | public void Initialize()
      method Update (line 214) | public MonitoringUpdateResults Update()
      method GetHelpText (line 233) | public string GetHelpText()
      method computeMetrics (line 238) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class SwPrefetchConfig (line 254) | public class SwPrefetchConfig : MonitoringConfig
      method GetConfigName (line 257) | public string GetConfigName() { return "Software Prefetch"; }
      method SwPrefetchConfig (line 259) | public SwPrefetchConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 261) | public string[] GetColumns() { return columns; }
      method Initialize (line 263) | public void Initialize()
      method Update (line 274) | public MonitoringUpdateResults Update()
      method GetHelpText (line 293) | public string GetHelpText()
      method computeMetrics (line 298) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class HwPrefetchConfig (line 315) | public class HwPrefetchConfig : MonitoringConfig
      method GetConfigName (line 318) | public string GetConfigName() { return "Hardware Prefetch"; }
      method HwPrefetchConfig (line 320) | public HwPrefetchConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 322) | public string[] GetColumns() { return columns; }
      method Initialize (line 324) | public void Initialize()
      method Update (line 335) | public MonitoringUpdateResults Update()
      method GetHelpText (line 354) | public string GetHelpText()
      method computeMetrics (line 359) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DCFillConfig (line 374) | public class DCFillConfig : MonitoringConfig
      method GetConfigName (line 377) | public string GetConfigName() { return "All L1D Fills"; }
      method DCFillConfig (line 379) | public DCFillConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 381) | public string[] GetColumns() { return columns; }
      method Initialize (line 383) | public void Initialize()
      method Update (line 394) | public MonitoringUpdateResults Update()
      method GetHelpText (line 413) | public string GetHelpText()
      method computeMetrics (line 418) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallConfig (line 433) | public class DispatchStallConfig : MonitoringConfig
      method GetConfigName (line 436) | public string GetConfigName() { return "Dispatch Stalls"; }
      method DispatchStallConfig (line 438) | public DispatchStallConfig(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 440) | public string[] GetColumns() { return columns; }
      method Initialize (line 442) | public void Initialize()
      method Update (line 453) | public MonitoringUpdateResults Update()
      method GetHelpText (line 472) | public string GetHelpText()
      method computeMetrics (line 477) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallConfig1 (line 492) | public class DispatchStallConfig1 : MonitoringConfig
      method GetConfigName (line 495) | public string GetConfigName() { return "Dispatch Stalls (Sched)"; }
      method DispatchStallConfig1 (line 497) | public DispatchStallConfig1(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 499) | public string[] GetColumns() { return columns; }
      method Initialize (line 501) | public void Initialize()
      method Update (line 512) | public MonitoringUpdateResults Update()
      method GetHelpText (line 531) | public string GetHelpText()
      method computeMetrics (line 536) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L2Config (line 551) | public class L2Config : MonitoringConfig
      method GetConfigName (line 554) | public string GetConfigName() { return "L2 Cache"; }
      method L2Config (line 556) | public L2Config(Zen3 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 558) | public string[] GetColumns() { return columns; }
      method Initialize (line 560) | public void Initialize()
      method Update (line 571) | public MonitoringUpdateResults Update()
      method GetHelpText (line 590) | public string GetHelpText()
      method computeMetrics (line 595) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen3L3Cache.cs
  class Zen3L3Cache (line 8) | public class Zen3L3Cache : Amd17hCpu
    method Zen3L3Cache (line 17) | public Zen3L3Cache()
    class L3CounterData (line 49) | public class L3CounterData
    method ClearTotals (line 59) | public void ClearTotals()
    method UpdateCcxL3CounterData (line 69) | public void UpdateCcxL3CounterData(int ccxIdx, int threadIdx)
    method GetOverallL3CounterValues (line 95) | public Tuple<string, float>[] GetOverallL3CounterValues(ulong aperf, u...
    class HitRateLatencyConfig (line 112) | public class HitRateLatencyConfig : MonitoringConfig
      method HitRateLatencyConfig (line 116) | public HitRateLatencyConfig(Zen3L3Cache l3Cache)
      method GetConfigName (line 121) | public string GetConfigName() { return "Hitrate and Miss Latency"; }
      method GetColumns (line 122) | public string[] GetColumns() { return columns; }
      method Initialize (line 123) | public void Initialize()
      method Update (line 142) | public MonitoringUpdateResults Update()
      method GetHelpText (line 183) | public string GetHelpText() { return ""; }
      method computeMetrics (line 185) | private string[] computeMetrics(string label, L3CounterData counterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen4.cs
  class Zen4 (line 5) | public class Zen4 : Amd19hCpu
    method Zen4 (line 7) | public Zen4()
    class BpuMonitoringConfig (line 36) | public class BpuMonitoringConfig : MonitoringConfig
      method GetConfigName (line 39) | public string GetConfigName() { return "Branch Prediction"; }
      method BpuMonitoringConfig (line 41) | public BpuMonitoringConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 43) | public string[] GetColumns() { return columns; }
      method Initialize (line 45) | public void Initialize()
      method Update (line 55) | public MonitoringUpdateResults Update()
      method GetHelpText (line 73) | public string GetHelpText()
      method computeMetrics (line 78) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FlopsConfig (line 94) | public class FlopsConfig : MonitoringConfig
      method GetConfigName (line 97) | public string GetConfigName() { return "AVX/SSE FLOPs"; }
      method FlopsConfig (line 99) | public FlopsConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 101) | public string[] GetColumns() { return columns; }
      method Initialize (line 103) | public void Initialize()
      method Update (line 111) | public MonitoringUpdateResults Update()
      method GetHelpText (line 129) | public string GetHelpText()
      method computeMetrics (line 134) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class VecIntConfig (line 150) | public class VecIntConfig : MonitoringConfig
      method GetConfigName (line 153) | public string GetConfigName() { return "Vector Integer Ops"; }
      method VecIntConfig (line 155) | public VecIntConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 157) | public string[] GetColumns() { return columns; }
      method Initialize (line 159) | public void Initialize()
      method Update (line 166) | public MonitoringUpdateResults Update()
      method GetHelpText (line 184) | public string GetHelpText()
      method computeMetrics (line 189) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FpOpWidthConfig (line 202) | public class FpOpWidthConfig : MonitoringConfig
      method GetConfigName (line 205) | public string GetConfigName() { return "FP Op Width"; }
      method FpOpWidthConfig (line 207) | public FpOpWidthConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 209) | public string[] GetColumns() { return columns; }
      method Initialize (line 211) | public void Initialize()
      method Update (line 221) | public MonitoringUpdateResults Update()
      method GetHelpText (line 239) | public string GetHelpText()
      method computeMetrics (line 244) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FpPipes (line 260) | public class FpPipes : MonitoringConfig
      method GetConfigName (line 263) | public string GetConfigName() { return "FP Pipes (undoc)"; }
      method FpPipes (line 265) | public FpPipes(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 267) | public string[] GetColumns() { return columns; }
      method Initialize (line 269) | public void Initialize()
      method Update (line 279) | public MonitoringUpdateResults Update()
      method GetHelpText (line 297) | public string GetHelpText()
      method computeMetrics (line 302) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FrontendOpsConfig (line 318) | public class FrontendOpsConfig : MonitoringConfig
      method GetConfigName (line 321) | public string GetConfigName() { return "Ops from Frontend"; }
      method FrontendOpsConfig (line 323) | public FrontendOpsConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 325) | public string[] GetColumns() { return columns; }
      method Initialize (line 327) | public void Initialize()
      method Update (line 337) | public MonitoringUpdateResults Update()
      method GetHelpText (line 358) | public string GetHelpText()
      method computeMetrics (line 363) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class TlbConfig (line 392) | public class TlbConfig : MonitoringConfig
      method GetConfigName (line 395) | public string GetConfigName() { return "DTLB"; }
      method TlbConfig (line 397) | public TlbConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 399) | public string[] GetColumns() { return columns; }
      method Initialize (line 401) | public void Initialize()
      method Update (line 411) | public MonitoringUpdateResults Update()
      method GetHelpText (line 429) | public string GetHelpText()
      method computeMetrics (line 434) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LocksConfig (line 447) | public class LocksConfig : MonitoringConfig
      method GetConfigName (line 450) | public string GetConfigName() { return "LS Locks"; }
      method LocksConfig (line 452) | public LocksConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 454) | public string[] GetColumns() { return columns; }
      method Initialize (line 456) | public void Initialize()
      method Update (line 467) | public MonitoringUpdateResults Update()
      method GetHelpText (line 486) | public string GetHelpText()
      method computeMetrics (line 491) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class SwPrefetchConfig (line 507) | public class SwPrefetchConfig : MonitoringConfig
      method GetConfigName (line 510) | public string GetConfigName() { return "Software Prefetch"; }
      method SwPrefetchConfig (line 512) | public SwPrefetchConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 514) | public string[] GetColumns() { return columns; }
      method Initialize (line 516) | public void Initialize()
      method Update (line 527) | public MonitoringUpdateResults Update()
      method GetHelpText (line 546) | public string GetHelpText()
      method computeMetrics (line 551) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DCFillConfig (line 568) | public class DCFillConfig : MonitoringConfig
      method GetConfigName (line 571) | public string GetConfigName() { return "All L1D Fills"; }
      method DCFillConfig (line 573) | public DCFillConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 575) | public string[] GetColumns() { return columns; }
      method Initialize (line 577) | public void Initialize()
      method Update (line 588) | public MonitoringUpdateResults Update()
      method GetHelpText (line 607) | public string GetHelpText()
      method computeMetrics (line 612) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DemandDCFillConfig (line 628) | public class DemandDCFillConfig : MonitoringConfig
      method GetConfigName (line 631) | public string GetConfigName() { return "Demand L1D Fills"; }
      method DemandDCFillConfig (line 633) | public DemandDCFillConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 635) | public string[] GetColumns() { return columns; }
      method Initialize (line 637) | public void Initialize()
      method Update (line 648) | public MonitoringUpdateResults Update()
      method GetHelpText (line 667) | public string GetHelpText()
      method computeMetrics (line 672) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallConfig (line 687) | public class DispatchStallConfig : MonitoringConfig
      method GetConfigName (line 690) | public string GetConfigName() { return "Dispatch Stalls"; }
      method DispatchStallConfig (line 692) | public DispatchStallConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 694) | public string[] GetColumns() { return columns; }
      method Initialize (line 696) | public void Initialize()
      method Update (line 707) | public MonitoringUpdateResults Update()
      method GetHelpText (line 726) | public string GetHelpText()
      method computeMetrics (line 731) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallConfig1 (line 746) | public class DispatchStallConfig1 : MonitoringConfig
      method GetConfigName (line 749) | public string GetConfigName() { return "Dispatch Stalls (Sched)"; }
      method DispatchStallConfig1 (line 751) | public DispatchStallConfig1(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 753) | public string[] GetColumns() { return columns; }
      method Initialize (line 755) | public void Initialize()
      method Update (line 766) | public MonitoringUpdateResults Update()
      method GetHelpText (line 785) | public string GetHelpText()
      method computeMetrics (line 790) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class MABOccupancyConfig (line 806) | public class MABOccupancyConfig : MonitoringConfig
      method GetConfigName (line 809) | public string GetConfigName() { return "MAB Occupancy"; }
      method MABOccupancyConfig (line 811) | public MABOccupancyConfig(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 813) | public string[] GetColumns() { return columns; }
      method Initialize (line 815) | public void Initialize()
      method Update (line 826) | public MonitoringUpdateResults Update()
      method GetHelpText (line 845) | public string GetHelpText()
      method computeMetrics (line 850) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class L1DBw (line 866) | public class L1DBw : MonitoringConfig
      method GetConfigName (line 869) | public string GetConfigName() { return "L1D BW"; }
      method L1DBw (line 871) | public L1DBw(Zen4 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 873) | public string[] GetColumns() { return columns; }
      method Initialize (line 875) | public void Initialize()
      method Update (line 886) | public MonitoringUpdateResults Update()
      method GetHelpText (line 906) | public string GetHelpText()
      method computeMetrics (line 911) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen4DataFabric.cs
  class Zen4DataFabric (line 7) | public class Zen4DataFabric : Amd19hCpu
    type DfType (line 9) | public enum DfType
    method Zen4DataFabric (line 14) | public Zen4DataFabric(DfType dfType)
    class ClientBwConfig (line 24) | public class ClientBwConfig : MonitoringConfig
      method GetHelpText (line 31) | public string GetHelpText() { return ""; }
      method ClientBwConfig (line 32) | public ClientBwConfig(Zen4DataFabric dataFabric)
      method GetConfigName (line 40) | public string GetConfigName() { return "DRAM Bandwidth??"; }
      method GetColumns (line 41) | public string[] GetColumns() { return columns; }
      method Initialize (line 42) | public void Initialize()
      method GetDramPerfEvent (line 58) | private ulong GetDramPerfEvent(bool read, uint index)
      method Update (line 70) | public MonitoringUpdateResults Update()
    class CSConfig (line 104) | public class CSConfig : MonitoringConfig
      method GetHelpText (line 111) | public string GetHelpText() { return ""; }
      method CSConfig (line 112) | public CSConfig(Zen4DataFabric dataFabric)
      method GetConfigName (line 117) | public string GetConfigName() { return "Coherent Station?"; }
      method GetColumns (line 118) | public string[] GetColumns() { return columns; }
      method Initialize (line 119) | public void Initialize()
      method Update (line 135) | public MonitoringUpdateResults Update()
    class UMCConfig (line 169) | public class UMCConfig : MonitoringConfig
      method GetHelpText (line 176) | public string GetHelpText() { return ""; }
      method UMCConfig (line 177) | public UMCConfig(Zen4DataFabric dataFabric)
      method GetConfigName (line 182) | public string GetConfigName() { return "UMC?"; }
      method GetColumns (line 183) | public string[] GetColumns() { return columns; }
      method Initialize (line 184) | public void Initialize()
      method Update (line 208) | public MonitoringUpdateResults Update()

FILE: pmcreader-plugin/PmcReader/AMD/Zen4L3Cache.cs
  class Zen4L3Cache (line 8) | public class Zen4L3Cache : Amd17hCpu
    method Zen4L3Cache (line 16) | public Zen4L3Cache()
    class L3CounterData (line 50) | public class L3CounterData
    method ClearTotals (line 60) | public void ClearTotals()
    method UpdateCcxL3CounterData (line 70) | public void UpdateCcxL3CounterData(int ccxIdx, int threadIdx)
    method GetOverallL3CounterValues (line 96) | public Tuple<string, float>[] GetOverallL3CounterValues(ulong aperf, u...
    class HitRateLatencyConfig (line 113) | public class HitRateLatencyConfig : MonitoringConfig
      method HitRateLatencyConfig (line 117) | public HitRateLatencyConfig(Zen4L3Cache l3Cache)
      method GetConfigName (line 122) | public string GetConfigName() { return "Hitrate and Latency"; }
      method GetColumns (line 123) | public string[] GetColumns() { return columns; }
      method Initialize (line 124) | public void Initialize()
      method Update (line 150) | public MonitoringUpdateResults Update()
      method GetHelpText (line 205) | public string GetHelpText() { return ""; }
      method computeMetrics (line 207) | private string[] computeMetrics(string label, L3CounterData counterD...
    class ExperimentalHitrateConfig (line 224) | public class ExperimentalHitrateConfig : MonitoringConfig
      method ExperimentalHitrateConfig (line 228) | public ExperimentalHitrateConfig(Zen4L3Cache l3Cache)
      method GetConfigName (line 233) | public string GetConfigName() { return "Experimental Hitrate"; }
      method GetColumns (line 234) | public string[] GetColumns() { return columns; }
      method Initialize (line 235) | public void Initialize()
      method Update (line 272) | public MonitoringUpdateResults Update()
      method GetHelpText (line 313) | public string GetHelpText() { return ""; }
      method computeMetrics (line 315) | private string[] computeMetrics(string label, L3CounterData counterD...
    class MissOccupancyConfig (line 334) | public class MissOccupancyConfig : MonitoringConfig
      method MissOccupancyConfig (line 338) | public MissOccupancyConfig(Zen4L3Cache l3Cache)
      method GetConfigName (line 343) | public string GetConfigName() { return "Experimental L3 Miss/Latency...
      method GetColumns (line 344) | public string[] GetColumns() { return columns; }
      method Initialize (line 345) | public void Initialize()
      method Update (line 382) | public MonitoringUpdateResults Update()
      method GetHelpText (line 423) | public string GetHelpText() { return ""; }
      method computeMetrics (line 425) | private string[] computeMetrics(string label, L3CounterData counterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen5.cs
  class Zen5 (line 5) | public class Zen5 : Amd19hCpu
    method Zen5 (line 7) | public Zen5()
    class BPULatency (line 29) | public class BPULatency : MonitoringConfig
      method GetConfigName (line 32) | public string GetConfigName() { return "Branch Predictor"; }
      method BPULatency (line 34) | public BPULatency(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 36) | public string[] GetColumns() { return columns; }
      method Initialize (line 38) | public void Initialize()
      method Update (line 50) | public MonitoringUpdateResults Update()
      method GetHelpText (line 68) | public string GetHelpText()
      method computeMetrics (line 73) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DemandDCFill (line 90) | public class DemandDCFill : MonitoringConfig
      method GetConfigName (line 93) | public string GetConfigName() { return "Demand DC Fill"; }
      method DemandDCFill (line 95) | public DemandDCFill(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 97) | public string[] GetColumns() { return columns; }
      method Initialize (line 99) | public void Initialize()
      method Update (line 111) | public MonitoringUpdateResults Update()
      method GetHelpText (line 129) | public string GetHelpText()
      method computeMetrics (line 134) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DCFill (line 152) | public class DCFill : MonitoringConfig
      method GetConfigName (line 155) | public string GetConfigName() { return "DC Fill"; }
      method DCFill (line 157) | public DCFill(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 159) | public string[] GetColumns() { return columns; }
      method Initialize (line 161) | public void Initialize()
      method Update (line 173) | public MonitoringUpdateResults Update()
      method GetHelpText (line 191) | public string GetHelpText()
      method computeMetrics (line 196) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class BackendLatency (line 214) | public class BackendLatency : MonitoringConfig
      method GetConfigName (line 217) | public string GetConfigName() { return "Backend Latency"; }
      method BackendLatency (line 219) | public BackendLatency(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 221) | public string[] GetColumns() { return columns; }
      method Initialize (line 223) | public void Initialize()
      method Update (line 235) | public MonitoringUpdateResults Update()
      method GetHelpText (line 253) | public string GetHelpText()
      method computeMetrics (line 258) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FrontendOps (line 276) | public class FrontendOps : MonitoringConfig
      method GetConfigName (line 279) | public string GetConfigName() { return "Ops from Frontend"; }
      method FrontendOps (line 281) | public FrontendOps(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 283) | public string[] GetColumns() { return columns; }
      method Initialize (line 285) | public void Initialize()
      method Update (line 297) | public MonitoringUpdateResults Update()
      method GetHelpText (line 315) | public string GetHelpText()
      method computeMetrics (line 320) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStall (line 340) | public class DispatchStall : MonitoringConfig
      method GetConfigName (line 343) | public string GetConfigName() { return "Dispatch Stalls"; }
      method DispatchStall (line 345) | public DispatchStall(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 347) | public string[] GetColumns() { return columns; }
      method Initialize (line 349) | public void Initialize()
      method Update (line 359) | public MonitoringUpdateResults Update()
      method GetHelpText (line 377) | public string GetHelpText()
      method computeMetrics (line 382) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DispatchStallSched (line 398) | public class DispatchStallSched : MonitoringConfig
      method GetConfigName (line 401) | public string GetConfigName() { return "Dispatch Stalls (Sched)"; }
      method DispatchStallSched (line 403) | public DispatchStallSched(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 405) | public string[] GetColumns() { return columns; }
      method Initialize (line 407) | public void Initialize()
      method Update (line 417) | public MonitoringUpdateResults Update()
      method GetHelpText (line 435) | public string GetHelpText()
      method computeMetrics (line 440) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class FpPipes (line 456) | public class FpPipes : MonitoringConfig
      method GetConfigName (line 459) | public string GetConfigName() { return "FP Pipes (undoc)"; }
      method FpPipes (line 461) | public FpPipes(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 463) | public string[] GetColumns() { return columns; }
      method Initialize (line 465) | public void Initialize()
      method Update (line 475) | public MonitoringUpdateResults Update()
      method GetHelpText (line 493) | public string GetHelpText()
      method computeMetrics (line 498) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ICMissConfig (line 514) | public class ICMissConfig : MonitoringConfig
      method GetConfigName (line 517) | public string GetConfigName() { return "L1i Miss"; }
      method ICMissConfig (line 519) | public ICMissConfig(Zen5 amdCpu) { cpu = amdCpu; }
      method GetColumns (line 521) | public string[] GetColumns() { return columns; }
      method Initialize (line 523) | public void Initialize()
      method Update (line 533) | public MonitoringUpdateResults Update()
      method GetHelpText (line 552) | public string GetHelpText()
      method computeMetrics (line 557) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/AMD/Zen5DataFabric.cs
  class Zen5DataFabric (line 7) | public class Zen5DataFabric : Amd19hCpu
    type DfType (line 9) | public enum DfType
    method Zen5DataFabric (line 14) | public Zen5DataFabric(DfType dfType)
    class CMConfig (line 37) | public class CMConfig : MonitoringConfig
      method GetHelpText (line 45) | public string GetHelpText() { return ""; }
      method CMConfig (line 46) | public CMConfig(Zen5DataFabric dataFabric)
      method GetConfigName (line 51) | public string GetConfigName() { return "CCM"; }
      method GetColumns (line 52) | public string[] GetColumns() { return columns; }
      method Initialize (line 53) | public void Initialize()
      method Update (line 80) | public MonitoringUpdateResults Update()
    class CSConfig (line 122) | public class CSConfig : MonitoringConfig
      method GetHelpText (line 130) | public string GetHelpText() { return ""; }
      method CSConfig (line 131) | public CSConfig(Zen5DataFabric dataFabric)
      method GetConfigName (line 136) | public string GetConfigName() { return "CS"; }
      method GetColumns (line 137) | public string[] GetColumns() { return columns; }
      method Initialize (line 138) | public void Initialize()
      method Update (line 165) | public MonitoringUpdateResults Update()
    class UMCConfig (line 207) | public class UMCConfig : MonitoringConfig
      method GetHelpText (line 215) | public string GetHelpText() { return ""; }
      method UMCConfig (line 216) | public UMCConfig(Zen5DataFabric dataFabric)
      method GetConfigName (line 221) | public string GetConfigName() { return "UMC"; }
      method GetColumns (line 222) | public string[] GetColumns() { return columns; }
      method Initialize (line 223) | public void Initialize()
      method Update (line 267) | public MonitoringUpdateResults Update()
    class UMCSubtimingsConfig (line 330) | public class UMCSubtimingsConfig : MonitoringConfig
      method GetHelpText (line 338) | public string GetHelpText() { return ""; }
      method UMCSubtimingsConfig (line 339) | public UMCSubtimingsConfig(Zen5DataFabric dataFabric)
      method GetConfigName (line 344) | public string GetConfigName() { return "Subtimings"; }
      method GetColumns (line 345) | public string[] GetColumns() { return columns; }
      method Initialize (line 346) | public void Initialize()
      method Update (line 387) | public MonitoringUpdateResults Update()

FILE: pmcreader-plugin/PmcReader/AMD/Zen5Diagnostics.cs
  class Zen5Diagnostics (line 11) | public static class Zen5Diagnostics
    method Initialize (line 28) | public static void Initialize()
    method GetLogPath (line 60) | public static string GetLogPath()
    method Log (line 68) | public static void Log(string message)
    method LogSection (line 96) | public static void LogSection(string title)
    method LogTopology (line 105) | public static void LogTopology(int coreCount, int threadCount, int ccx...
    method LogApicIds (line 132) | public static void LogApicIds(int threadCount, Func<int, (uint apicId,...
    method LogCcxCalculation (line 157) | public static void LogCcxCalculation(int threadId, int coreCount, int ...
    method LogL3Init (line 171) | public static void LogL3Init(int ccxIdx, int threadIdx, ulong[] perfCt...
    method LogL3CounterRead (line 185) | public static void LogL3CounterRead(int ccxIdx, int threadIdx, ulong c...
    method LogL3CounterNormalized (line 195) | public static void LogL3CounterNormalized(int ccxIdx, float ctr0, floa...
    method LogFixedCounters (line 206) | public static void LogFixedCounters(int threadIdx, ulong aperf, ulong ...
    method LogComputedMetrics (line 214) | public static void LogComputedMetrics(string label, float hitrate, flo...
    method LogTotals (line 224) | public static void LogTotals(float ctr0, float ctr1, float ctr2, float...
    method LogUpdateStart (line 233) | public static void LogUpdateStart(string configName)
    method LogUpdateEnd (line 243) | public static void LogUpdateEnd()
    method LogDFCounters (line 251) | public static void LogDFCounters(string configName, ulong[] counters, ...
    method LogAffinitySet (line 265) | public static void LogAffinitySet(int threadIdx)
    method LogError (line 277) | public static void LogError(string message)
    method LogWarning (line 285) | public static void LogWarning(string message)
    method LogDivisionCheck (line 293) | public static void LogDivisionCheck(string label, float numerator, flo...
    method LogNormFactorComparison (line 304) | public static void LogNormFactorComparison(int threadIdx, float factor...
    method Finalize (line 316) | public static void Finalize()

FILE: pmcreader-plugin/PmcReader/AMD/Zen5L3Cache.cs
  class Zen5L3Cache (line 8) | public class Zen5L3Cache : Amd19hCpu
    method Zen5L3Cache (line 16) | public Zen5L3Cache()
    method TryGetExtendedApicIdEx (line 94) | private static bool TryGetExtendedApicIdEx(int threadId, out uint exte...
    class L3CounterData (line 108) | public class L3CounterData
    method ClearTotals (line 118) | public void ClearTotals()
    method UpdateCcxL3CounterData (line 128) | public void UpdateCcxL3CounterData(int ccxIdx, int threadIdx)
    method GetOverallL3CounterValues (line 168) | public Tuple<string, float>[] GetOverallL3CounterValues(ulong aperf, u...
    class HitRateLatencyConfig (line 185) | public class HitRateLatencyConfig : MonitoringConfig
      method HitRateLatencyConfig (line 190) | public HitRateLatencyConfig(Zen5L3Cache l3Cache)
      method GetConfigName (line 195) | public string GetConfigName() { return "Hitrate and Latency"; }
      method GetColumns (line 196) | public string[] GetColumns() { return columns; }
      method Initialize (line 197) | public void Initialize()
      method InitializeThread (line 211) | private void InitializeThread(int ccxIdx = -1, int threadIdx = -1)
      method Update (line 247) | public MonitoringUpdateResults Update()
      method GetHelpText (line 351) | public string GetHelpText() { return ""; }
      method ComputeMetrics (line 353) | private string[] ComputeMetrics(string label, string threadsInfo, L3...
    class TopologyConfig (line 384) | public class TopologyConfig : MonitoringConfig
      method TopologyConfig (line 388) | public TopologyConfig(Zen5L3Cache l3Cache)
      method GetConfigName (line 393) | public string GetConfigName() { return "APIC ID / CCX Topology"; }
      method GetColumns (line 394) | public string[] GetColumns() { return columns; }
      method Initialize (line 397) | public void Initialize() { }
      method GetHelpText (line 399) | public string GetHelpText()
      method Update (line 405) | public MonitoringUpdateResults Update()
      method TryGetExtendedApicIdEx (line 497) | private static bool TryGetExtendedApicIdEx(int threadId, out uint ex...

FILE: pmcreader-plugin/PmcReader/AMD/ZenL3Cache.cs
  class ZenL3Cache (line 8) | public class ZenL3Cache : Amd17hCpu
    method ZenL3Cache (line 16) | public ZenL3Cache()
    class L3CounterData (line 48) | public class L3CounterData
    method ClearTotals (line 58) | public void ClearTotals()
    method UpdateCcxL3CounterData (line 68) | public void UpdateCcxL3CounterData(int ccxIdx, int threadIdx)
    method GetOverallL3CounterValues (line 94) | public Tuple<string, float>[] GetOverallL3CounterValues(ulong aperf, u...
    class HitRateLatencyConfig (line 111) | public class HitRateLatencyConfig : MonitoringConfig
      method HitRateLatencyConfig (line 115) | public HitRateLatencyConfig(ZenL3Cache l3Cache)
      method GetConfigName (line 120) | public string GetConfigName() { return "Hitrate and Miss Latency"; }
      method GetColumns (line 121) | public string[] GetColumns() { return columns; }
      method Initialize (line 122) | public void Initialize()
      method Update (line 143) | public MonitoringUpdateResults Update()
      method GetHelpText (line 184) | public string GetHelpText() { return ""; }
      method computeMetrics (line 186) | private string[] computeMetrics(string label, L3CounterData counterD...

FILE: pmcreader-plugin/PmcReader/Cpu.cs
  type MonitoringArea (line 7) | public interface MonitoringArea
    method GetMonitoringConfigs (line 9) | MonitoringConfig[] GetMonitoringConfigs();
    method GetArchitectureName (line 11) | string GetArchitectureName();
    method MonitoringThread (line 16) | void MonitoringThread(int configId, ListView listView, CancellationTok...
    method GetThreadCount (line 22) | int GetThreadCount();
    method StartLogToFile (line 30) | string StartLogToFile(string filePath, int targetCore);
    method StopLoggingToFile (line 31) | void StopLoggingToFile();
  type MonitoringConfig (line 34) | public interface MonitoringConfig
    method GetConfigName (line 40) | string GetConfigName();
    method GetHelpText (line 46) | string GetHelpText();
    method GetColumns (line 52) | string[] GetColumns();
    method Initialize (line 57) | void Initialize();
    method Update (line 62) | MonitoringUpdateResults Update();
  class MonitoringUpdateResults (line 68) | public class MonitoringUpdateResults

FILE: pmcreader-plugin/PmcReader/GenericMonitoringArea.cs
  class GenericMonitoringArea (line 12) | public class GenericMonitoringArea : MonitoringArea
    method GenericMonitoringArea (line 25) | public GenericMonitoringArea()
    method GetThreadCount (line 34) | public int GetThreadCount()
    method GetMonitoringConfigs (line 39) | public MonitoringConfig[] GetMonitoringConfigs()
    method GetArchitectureName (line 44) | public string GetArchitectureName()
    method StartLogToFile (line 54) | public string StartLogToFile(string filePath, int targetCoreIndex)
    method StopLoggingToFile (line 104) | public void StopLoggingToFile()
    method MonitoringThread (line 120) | public void MonitoringThread(int configId, ListView listView, Cancella...
    method SetMonitoringListViewColumns (line 218) | public void SetMonitoringListViewColumns(string[] columns, ListView mo...
    method SetMonitoringListView (line 240) | public void SetMonitoringListView(MonitoringUpdateResults updateResult...
    method UpdateListViewItem (line 273) | public static void UpdateListViewItem(string[] newFields, ListViewItem...
    method FormatLargeNumber (line 286) | public static string FormatLargeNumber(ulong n)
    method FormatLargeNumber (line 308) | public static string FormatLargeNumber(float n)
    method FormatPercentage (line 330) | public static string FormatPercentage(float n, float total)
    method ReadAndClearMsr (line 342) | public static ulong ReadAndClearMsr(uint msrIndex)
    method GetNormalizationFactor (line 355) | public float GetNormalizationFactor(ref long lastUpdateTime)
    method GetNormalizationFactor (line 369) | public float GetNormalizationFactor(int index)
    method InitializeCrazyControls (line 388) | public virtual void InitializeCrazyControls(FlowLayoutPanel flowLayout...
    method CreateButton (line 390) | protected Button CreateButton(string buttonText, EventHandler handler)

FILE: pmcreader-plugin/PmcReader/HaswellForm.Designer.cs
  class HaswellForm (line 3) | partial class HaswellForm
    method Dispose (line 14) | protected override void Dispose(bool disposing)
    method InitializeComponent (line 29) | private void InitializeComponent()

FILE: pmcreader-plugin/PmcReader/HaswellForm.cs
  class HaswellForm (line 9) | public partial class HaswellForm : Form
    method HaswellForm (line 20) | public HaswellForm()
    method HaswellForm_FormClosed (line 243) | private void HaswellForm_FormClosed(object sender, FormClosedEventArgs e)
    method applyDfConfigButton_Click (line 261) | private void applyDfConfigButton_Click(object sender, EventArgs e)
    method applyL3ConfigButton_Click (line 266) | private void applyL3ConfigButton_Click(object sender, EventArgs e)
    method listView1_SelectedIndexChanged (line 271) | private void listView1_SelectedIndexChanged(object sender, EventArgs e)
    method HaswellForm_Load (line 276) | private void HaswellForm_Load(object sender, EventArgs e)
    method logButton_Click (line 281) | private void logButton_Click(object sender, EventArgs e)
    method stopLoggingButton_Click (line 301) | private void stopLoggingButton_Click(object sender, EventArgs e)
    method L3LogToFileButton_Click (line 307) | private void L3LogToFileButton_Click(object sender, EventArgs e)
    method L3StopLoggingButton_Click (line 319) | private void L3StopLoggingButton_Click(object sender, EventArgs e)
    method DfLogToFileButton_Click (line 325) | private void DfLogToFileButton_Click(object sender, EventArgs e)
    method DfStopLoggingButton_Click (line 336) | private void DfStopLoggingButton_Click(object sender, EventArgs e)
    method applyConfigButton_Click (line 342) | private void applyConfigButton_Click(object sender, EventArgs e)
    method fillConfigListView (line 352) | private void fillConfigListView(MonitoringConfig[] configs, ListView c...
    method applyMonitoringConfig (line 375) | private void applyMonitoringConfig(MonitoringSetup setup, ListView con...
    class MonitoringSetup (line 408) | private class MonitoringSetup

FILE: pmcreader-plugin/PmcReader/Intel/AlderLake.cs
  class AlderLake (line 7) | public class AlderLake : ModernIntelCpu
    method AlderLake (line 12) | public AlderLake()
    class PCoreVector (line 59) | public class PCoreVector : MonitoringConfig
      method GetConfigName (line 63) | public string GetConfigName() { return "P Cores: Vector Instrs"; }
      method PCoreVector (line 65) | public PCoreVector(AlderLake intelCpu)
      method GetColumns (line 78) | public string[] GetColumns()
      method Initialize (line 83) | public void Initialize()
      method Update (line 99) | public MonitoringUpdateResults Update()
      method GetHelpText (line 124) | public string GetHelpText()
      method computeMetrics (line 129) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCorePowerLicense (line 149) | public class PCorePowerLicense : MonitoringConfig
      method GetConfigName (line 153) | public string GetConfigName() { return "P Cores: Power State/License...
      method PCorePowerLicense (line 155) | public PCorePowerLicense(AlderLake intelCpu)
      method GetColumns (line 168) | public string[] GetColumns()
      method Initialize (line 173) | public void Initialize()
      method Update (line 188) | public MonitoringUpdateResults Update()
      method GetHelpText (line 212) | public string GetHelpText()
      method computeMetrics (line 217) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoresMemExec (line 236) | public class ECoresMemExec : MonitoringConfig
      method GetConfigName (line 240) | public string GetConfigName() { return "E Cores: Memory Execution"; }
      method ECoresMemExec (line 242) | public ECoresMemExec(AlderLake intelCpu)
      method GetColumns (line 255) | public string[] GetColumns()
      method Initialize (line 260) | public void Initialize()
      method Update (line 275) | public MonitoringUpdateResults Update()
      method GetHelpText (line 299) | public string GetHelpText()
      method computeMetrics (line 304) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoresBackendBound (line 323) | public class ECoresBackendBound : MonitoringConfig
      method GetConfigName (line 328) | public string GetConfigName() { return "E Cores: Backend Bound"; }
      method ECoresBackendBound (line 330) | public ECoresBackendBound(AlderLake intelCpu)
      method GetColumns (line 343) | public string[] GetColumns()
      method Initialize (line 348) | public void Initialize()
      method Update (line 362) | public MonitoringUpdateResults Update()
      method GetHelpText (line 387) | public string GetHelpText()
      method computeMetrics (line 392) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LoadDataSources (line 413) | public class LoadDataSources : MonitoringConfig
      method GetConfigName (line 416) | public string GetConfigName() { return "Retired Data Loads"; }
      method LoadDataSources (line 418) | public LoadDataSources(AlderLake intelCpu)
      method GetColumns (line 423) | public string[] GetColumns()
      method Initialize (line 428) | public void Initialize()
      method Update (line 458) | public MonitoringUpdateResults Update()
      method GetHelpText (line 478) | public string GetHelpText()
      method computeMetrics (line 483) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoresTopDown (line 504) | public class ECoresTopDown : MonitoringConfig
      method GetConfigName (line 509) | public string GetConfigName() { return "E Cores: Top Down"; }
      method ECoresTopDown (line 511) | public ECoresTopDown(AlderLake intelCpu)
      method GetColumns (line 524) | public string[] GetColumns()
      method Initialize (line 529) | public void Initialize()
      method Update (line 543) | public MonitoringUpdateResults Update()
      method GetHelpText (line 568) | public string GetHelpText()
      method computeMetrics (line 573) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoresFEBound (line 595) | public class ECoresFEBound: MonitoringConfig
      method GetConfigName (line 600) | public string GetConfigName() { return "E Cores: Front End Bound"; }
      method ECoresFEBound (line 602) | public ECoresFEBound(AlderLake intelCpu)
      method GetColumns (line 615) | public string[] GetColumns()
      method Initialize (line 620) | public void Initialize()
      method Update (line 634) | public MonitoringUpdateResults Update()
      method GetHelpText (line 659) | public string GetHelpText()
      method computeMetrics (line 664) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoresBadSpec (line 683) | public class ECoresBadSpec : MonitoringConfig
      method GetConfigName (line 688) | public string GetConfigName() { return "E Cores: Bad Speculation"; }
      method ECoresBadSpec (line 690) | public ECoresBadSpec(AlderLake intelCpu)
      method GetColumns (line 703) | public string[] GetColumns()
      method Initialize (line 708) | public void Initialize()
      method Update (line 721) | public MonitoringUpdateResults Update()
      method GetHelpText (line 746) | public string GetHelpText()
      method computeMetrics (line 751) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoresLdHead (line 770) | public class ECoresLdHead : MonitoringConfig
      method GetConfigName (line 775) | public string GetConfigName() { return "E Cores: Load Head"; }
      method ECoresLdHead (line 777) | public ECoresLdHead(AlderLake intelCpu)
      method GetColumns (line 790) | public string[] GetColumns()
      method Initialize (line 795) | public void Initialize()
      method Update (line 809) | public MonitoringUpdateResults Update()
      method GetHelpText (line 834) | public string GetHelpText()
      method computeMetrics (line 839) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreGaming (line 865) | public class PCoreGaming : MonitoringConfig
      method GetConfigName (line 873) | public string GetConfigName() { return "All Cores: Gaming Performanc...
      method PCoreGaming (line 875) | public PCoreGaming(AlderLake intelCpu)
      method GetColumns (line 897) | public string[] GetColumns()
      method Initialize (line 902) | public void Initialize()
      method Update (line 938) | public MonitoringUpdateResults Update()
      method AccumulateCounters (line 1002) | private void AccumulateCounters(NormalizedCoreCounterData totals, No...
      method GetHelpText (line 1017) | public string GetHelpText()
      method computeMetrics (line 1025) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
      method computeCombinedMetrics (line 1075) | private string[] computeCombinedMetrics(string label, NormalizedCore...

FILE: pmcreader-plugin/PmcReader/Intel/AlderLakeL3.cs
  class AlderLakeL3 (line 7) | public class AlderLakeL3 : AlderLakeUncore
    method AlderLakeL3 (line 16) | public AlderLakeL3()
    class NormalizedCboCounterData (line 32) | public class NormalizedCboCounterData
    method InitializeCboTotals (line 38) | public void InitializeCboTotals()
    method UpdateCboCounterData (line 49) | public void UpdateCboCounterData(uint cboIdx)
    method GetOverallCounterValues (line 66) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    class HitrateConfig (line 74) | public class HitrateConfig : MonitoringConfig
      method GetConfigName (line 77) | public string GetConfigName() { return "L3 Hitrate"; }
      method HitrateConfig (line 79) | public HitrateConfig(AlderLakeL3 intelCpu)
      method GetColumns (line 84) | public string[] GetColumns()
      method Initialize (line 89) | public void Initialize()
      method Update (line 102) | public MonitoringUpdateResults Update()
      method GetHelpText (line 120) | public string GetHelpText() { return ""; }
      method computeMetrics (line 122) | private string[] computeMetrics(string label, NormalizedCboCounterDa...

FILE: pmcreader-plugin/PmcReader/Intel/AlderLakeUncore.cs
  class AlderLakeUncore (line 6) | public class AlderLakeUncore : ModernIntelCpu
    method AlderLakeUncore (line 22) | public AlderLakeUncore()
    method EnableUncoreCounters (line 30) | public void EnableUncoreCounters()
    method GetUncorePerfEvtSelRegisterValue (line 54) | public static ulong GetUncorePerfEvtSelRegisterValue(byte perfEvent,

FILE: pmcreader-plugin/PmcReader/Intel/ArrowLake.cs
  class ArrowLake (line 7) | public class ArrowLake : ModernIntelCpu
    method ArrowLake (line 12) | public ArrowLake()
    method GetArlPerfEvtSelValue (line 70) | public static ulong GetArlPerfEvtSelValue(byte perfEvent,
    class PCoreMem (line 99) | public class PCoreMem : MonitoringConfig
      method GetConfigName (line 103) | public string GetConfigName() { return "P Cores: Mem Load"; }
      method PCoreMem (line 105) | public PCoreMem(ArrowLake intelCpu)
      method GetColumns (line 118) | public string[] GetColumns()
      method Initialize (line 123) | public void Initialize()
      method Update (line 139) | public MonitoringUpdateResults Update()
      method GetHelpText (line 164) | public string GetHelpText()
      method computeMetrics (line 169) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreMemStalls (line 197) | public class PCoreMemStalls : MonitoringConfig
      method GetConfigName (line 201) | public string GetConfigName() { return "P Cores: Mem Bound"; }
      method PCoreMemStalls (line 203) | public PCoreMemStalls(ArrowLake intelCpu)
      method GetColumns (line 216) | public string[] GetColumns()
      method Initialize (line 221) | public void Initialize()
      method Update (line 237) | public MonitoringUpdateResults Update()
      method GetHelpText (line 262) | public string GetHelpText()
      method computeMetrics (line 267) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreGaming (line 292) | public class PCoreGaming : MonitoringConfig
      method GetConfigName (line 300) | public string GetConfigName() { return "All Cores: Gaming Performanc...
      method PCoreGaming (line 302) | public PCoreGaming(ArrowLake intelCpu)
      method GetColumns (line 320) | public string[] GetColumns()
      method Initialize (line 325) | public void Initialize()
      method Update (line 356) | public MonitoringUpdateResults Update()
      method AccumulateCounters (line 420) | private void AccumulateCounters(NormalizedCoreCounterData totals, No...
      method GetHelpText (line 435) | public string GetHelpText()
      method computeMetrics (line 442) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
      method computeCombinedMetrics (line 482) | private string[] computeCombinedMetrics(string label, NormalizedCore...
    class PCoreRetireHistogram (line 523) | public class PCoreRetireHistogram : MonitoringConfig
      method GetConfigName (line 527) | public string GetConfigName() { return "P Cores: Retire Histogram"; }
      method PCoreRetireHistogram (line 529) | public PCoreRetireHistogram(ArrowLake intelCpu)
      method GetColumns (line 542) | public string[] GetColumns()
      method Initialize (line 547) | public void Initialize()
      method Update (line 561) | public MonitoringUpdateResults Update()
      method GetHelpText (line 586) | public string GetHelpText()
      method computeMetrics (line 591) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreRetireBurst (line 611) | public class PCoreRetireBurst : MonitoringConfig
      method GetConfigName (line 615) | public string GetConfigName() { return "P Cores: Retire Burst"; }
      method PCoreRetireBurst (line 617) | public PCoreRetireBurst(ArrowLake intelCpu)
      method GetColumns (line 630) | public string[] GetColumns()
      method Initialize (line 635) | public void Initialize()
      method Update (line 650) | public MonitoringUpdateResults Update()
      method GetHelpText (line 675) | public string GetHelpText()
      method computeMetrics (line 680) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreIntMisc (line 696) | public class PCoreIntMisc : MonitoringConfig
      method GetConfigName (line 700) | public string GetConfigName() { return "P: INT MISC, L1D Miss"; }
      method PCoreIntMisc (line 702) | public PCoreIntMisc(ArrowLake intelCpu)
      method GetColumns (line 715) | public string[] GetColumns()
      method Initialize (line 720) | public void Initialize()
      method Update (line 744) | public MonitoringUpdateResults Update()
      method GetHelpText (line 769) | public string GetHelpText()
      method computeMetrics (line 774) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreIFetch (line 794) | public class PCoreIFetch : MonitoringConfig
      method GetConfigName (line 798) | public string GetConfigName() { return "P Cores: Instr Fetch"; }
      method PCoreIFetch (line 800) | public PCoreIFetch(ArrowLake intelCpu)
      method GetColumns (line 813) | public string[] GetColumns()
      method Initialize (line 818) | public void Initialize()
      method Update (line 834) | public MonitoringUpdateResults Update()
      method GetHelpText (line 859) | public string GetHelpText()
      method computeMetrics (line 864) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreIFetchExperiemntal (line 885) | public class PCoreIFetchExperiemntal : MonitoringConfig
      method GetConfigName (line 889) | public string GetConfigName() { return "P Cores: IF Experiment"; }
      method PCoreIFetchExperiemntal (line 891) | public PCoreIFetchExperiemntal(ArrowLake intelCpu)
      method GetColumns (line 904) | public string[] GetColumns()
      method Initialize (line 909) | public void Initialize()
      method Update (line 925) | public MonitoringUpdateResults Update()
      method GetHelpText (line 950) | public string GetHelpText()
      method computeMetrics (line 955) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreBranch (line 971) | public class PCoreBranch : MonitoringConfig
      method GetConfigName (line 975) | public string GetConfigName() { return "P Cores: Branch"; }
      method PCoreBranch (line 977) | public PCoreBranch(ArrowLake intelCpu)
      method GetColumns (line 990) | public string[] GetColumns()
      method Initialize (line 995) | public void Initialize()
      method Update (line 1019) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1044) | public string GetHelpText()
      method computeMetrics (line 1049) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreL2 (line 1070) | public class PCoreL2 : MonitoringConfig
      method GetConfigName (line 1074) | public string GetConfigName() { return "P Cores: L2"; }
      method PCoreL2 (line 1076) | public PCoreL2(ArrowLake intelCpu)
      method GetColumns (line 1089) | public string[] GetColumns()
      method Initialize (line 1094) | public void Initialize()
      method Update (line 1110) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1136) | public string GetHelpText()
      method computeMetrics (line 1141) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreTopDown (line 1164) | public class PCoreTopDown : MonitoringConfig
      method GetConfigName (line 1168) | public string GetConfigName() { return "P Cores: Top Down"; }
      method PCoreTopDown (line 1170) | public PCoreTopDown(ArrowLake intelCpu)
      method GetColumns (line 1183) | public string[] GetColumns()
      method Initialize (line 1188) | public void Initialize()
      method Update (line 1204) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1229) | public string GetHelpText()
      method computeMetrics (line 1234) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class PCoreReadEvt (line 1253) | public class PCoreReadEvt : MonitoringConfig
      method GetConfigName (line 1257) | public string GetConfigName() { return "P Cores: Read Events"; }
      method PCoreReadEvt (line 1259) | public PCoreReadEvt(ArrowLake intelCpu)
      method GetColumns (line 1276) | public string[] GetColumns()
      method Initialize (line 1281) | public void Initialize()
      method Update (line 1285) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1315) | public string GetHelpText()
    class ECoreTopDown (line 1322) | public class ECoreTopDown : MonitoringConfig
      method GetConfigName (line 1326) | public string GetConfigName() { return "E Cores: Top Down"; }
      method ECoreTopDown (line 1328) | public ECoreTopDown(ArrowLake intelCpu)
      method GetColumns (line 1341) | public string[] GetColumns()
      method Initialize (line 1346) | public void Initialize()
      method Update (line 1370) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1395) | public string GetHelpText()
      method computeMetrics (line 1400) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreBranch (line 1421) | public class ECoreBranch : MonitoringConfig
      method GetConfigName (line 1425) | public string GetConfigName() { return "E Cores: Branch"; }
      method ECoreBranch (line 1427) | public ECoreBranch(ArrowLake intelCpu)
      method GetColumns (line 1440) | public string[] GetColumns()
      method Initialize (line 1445) | public void Initialize()
      method Update (line 1467) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1492) | public string GetHelpText()
      method computeMetrics (line 1497) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreIFetch (line 1515) | public class ECoreIFetch : MonitoringConfig
      method GetConfigName (line 1519) | public string GetConfigName() { return "E Cores: FE Latency"; }
      method ECoreIFetch (line 1521) | public ECoreIFetch(ArrowLake intelCpu)
      method GetColumns (line 1534) | public string[] GetColumns()
      method Initialize (line 1539) | public void Initialize()
      method Update (line 1563) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1588) | public string GetHelpText()
      method computeMetrics (line 1593) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreDecode (line 1612) | public class ECoreDecode : MonitoringConfig
      method GetConfigName (line 1616) | public string GetConfigName() { return "E Cores: Decode"; }
      method ECoreDecode (line 1618) | public ECoreDecode(ArrowLake intelCpu)
      method GetColumns (line 1631) | public string[] GetColumns()
      method Initialize (line 1636) | public void Initialize()
      method Update (line 1652) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1677) | public string GetHelpText()
      method computeMetrics (line 1682) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreDispatchStall (line 1698) | public class ECoreDispatchStall : MonitoringConfig
      method GetConfigName (line 1702) | public string GetConfigName() { return "E Cores: Dispatch Stall"; }
      method ECoreDispatchStall (line 1704) | public ECoreDispatchStall(ArrowLake intelCpu)
      method GetColumns (line 1717) | public string[] GetColumns()
      method Initialize (line 1722) | public void Initialize()
      method Update (line 1738) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1764) | public string GetHelpText()
      method computeMetrics (line 1769) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreMemBound (line 1789) | public class ECoreMemBound : MonitoringConfig
      method GetConfigName (line 1793) | public string GetConfigName() { return "E Cores: Mem Bound"; }
      method ECoreMemBound (line 1795) | public ECoreMemBound(ArrowLake intelCpu)
      method GetColumns (line 1808) | public string[] GetColumns()
      method Initialize (line 1813) | public void Initialize()
      method Update (line 1829) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1854) | public string GetHelpText()
      method computeMetrics (line 1859) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreMemBound1 (line 1879) | public class ECoreMemBound1 : MonitoringConfig
      method GetConfigName (line 1883) | public string GetConfigName() { return "E Cores: Mem Bound 1"; }
      method ECoreMemBound1 (line 1885) | public ECoreMemBound1(ArrowLake intelCpu)
      method GetColumns (line 1898) | public string[] GetColumns()
      method Initialize (line 1903) | public void Initialize()
      method Update (line 1919) | public MonitoringUpdateResults Update()
      method GetHelpText (line 1944) | public string GetHelpText()
      method computeMetrics (line 1949) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreLoadData (line 1968) | public class ECoreLoadData : MonitoringConfig
      method GetConfigName (line 1972) | public string GetConfigName() { return "E Cores: Load Data Source"; }
      method ECoreLoadData (line 1974) | public ECoreLoadData(ArrowLake intelCpu)
      method GetColumns (line 1987) | public string[] GetColumns()
      method Initialize (line 1992) | public void Initialize()
      method Update (line 2008) | public MonitoringUpdateResults Update()
      method GetHelpText (line 2033) | public string GetHelpText()
      method computeMetrics (line 2038) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreMachineClear (line 2057) | public class ECoreMachineClear : MonitoringConfig
      method GetConfigName (line 2061) | public string GetConfigName() { return "E Cores: Machine Clear"; }
      method ECoreMachineClear (line 2063) | public ECoreMachineClear(ArrowLake intelCpu)
      method GetColumns (line 2076) | public string[] GetColumns()
      method Initialize (line 2081) | public void Initialize()
      method Update (line 2097) | public MonitoringUpdateResults Update()
      method GetHelpText (line 2122) | public string GetHelpText()
      method computeMetrics (line 2127) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class ECoreSerialization (line 2146) | public class ECoreSerialization : MonitoringConfig
      method GetConfigName (line 2150) | public string GetConfigName() { return "E Cores: Serialization"; }
      method ECoreSerialization (line 2152) | public ECoreSerialization(ArrowLake intelCpu)
      method GetColumns (line 2165) | public string[] GetColumns()
      method Initialize (line 2170) | public void Initialize()
      method Update (line 2186) | public MonitoringUpdateResults Update()
      method GetHelpText (line 2211) | public string GetHelpText()
      method computeMetrics (line 2216) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/Intel/ArrowLakeL3.cs
  class ArrowLakeL3 (line 12) | public class ArrowLakeL3 : MeteorLakeUncore
    method ArrowLakeL3 (line 21) | public ArrowLakeL3()
    class NormalizedHacCboCounterData (line 31) | public class NormalizedHacCboCounterData
    method InitializeHacCboTotals (line 39) | public void InitializeHacCboTotals()
    method UpdateHacCboCounterData (line 50) | public void UpdateHacCboCounterData(uint boxIdx)
    method GetOverallCounterValues (line 71) | public Tuple<string, float>[] GetOverallCounterValues(string ctr0, str...
    class TorAllocationConfig (line 85) | public class TorAllocationConfig : MonitoringConfig
      method GetConfigName (line 88) | public string GetConfigName() { return "L3 TOR Allocations"; }
      method TorAllocationConfig (line 90) | public TorAllocationConfig(ArrowLakeL3 intelCpu)
      method GetColumns (line 95) | public string[] GetColumns()
      method Initialize (line 100) | public void Initialize()
      method Update (line 122) | public MonitoringUpdateResults Update()
      method GetHelpText (line 141) | public string GetHelpText()
      method computeMetrics (line 146) | private string[] computeMetrics(string label, NormalizedHacCboCounte...

FILE: pmcreader-plugin/PmcReader/Intel/GoldmontPlus.cs
  class GoldmontPlus (line 6) | public class GoldmontPlus : ModernIntelCpu
    method GoldmontPlus (line 8) | public GoldmontPlus()
    method GetGoldmontOffcoreRspRegisterValue (line 34) | public static ulong GetGoldmontOffcoreRspRegisterValue(ushort reqType,...
    class BAClears (line 41) | public class BAClears : MonitoringConfig
      method GetConfigName (line 44) | public string GetConfigName() { return "BAClears"; }
      method GetHelpText (line 45) | public string GetHelpText() { return ""; }
      method BAClears (line 47) | public BAClears(GoldmontPlus intelCpu)
      method GetColumns (line 52) | public string[] GetColumns()
      method Initialize (line 57) | public void Initialize()
      method Update (line 77) | public MonitoringUpdateResults Update()
      method computeMetrics (line 97) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class BadSpec (line 114) | public class BadSpec : MonitoringConfig
      method GetConfigName (line 117) | public string GetConfigName() { return "Bad Speculation"; }
      method GetHelpText (line 118) | public string GetHelpText() { return ""; }
      method BadSpec (line 120) | public BadSpec(GoldmontPlus intelCpu)
      method GetColumns (line 125) | public string[] GetColumns()
      method Initialize (line 130) | public void Initialize()
      method Update (line 150) | public MonitoringUpdateResults Update()
      method computeMetrics (line 170) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class IFetch (line 187) | public class IFetch : MonitoringConfig
      method GetConfigName (line 190) | public string GetConfigName() { return "Instruction Fetch"; }
      method GetHelpText (line 191) | public string GetHelpText() { return ""; }
      method IFetch (line 193) | public IFetch(GoldmontPlus intelCpu)
      method GetColumns (line 198) | public string[] GetColumns()
      method Initialize (line 203) | public void Initialize()
      method Update (line 223) | public MonitoringUpdateResults Update()
      method computeMetrics (line 242) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class InstrPageWalk (line 259) | public class InstrPageWalk : MonitoringConfig
      method GetConfigName (line 262) | public string GetConfigName() { return "Instr Page Walk"; }
      method GetHelpText (line 263) | public string GetHelpText() { return ""; }
      method InstrPageWalk (line 265) | public InstrPageWalk(GoldmontPlus intelCpu)
      method GetColumns (line 270) | public string[] GetColumns()
      method Initialize (line 275) | public void Initialize()
      method Update (line 295) | public MonitoringUpdateResults Update()
      method computeMetrics (line 315) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class DTLB (line 334) | public class DTLB : MonitoringConfig
      method GetConfigName (line 337) | public string GetConfigName() { return "Data TLB"; }
      method GetHelpText (line 338) | public string GetHelpText() { return ""; }
      method DTLB (line 340) | public DTLB(GoldmontPlus intelCpu)
      method GetColumns (line 345) | public string[] GetColumns()
      method Initialize (line 350) | public void Initialize()
      method Update (line 370) | public MonitoringUpdateResults Update()
      method computeMetrics (line 390) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LSU (line 409) | public class LSU : MonitoringConfig
      method GetConfigName (line 412) | public string GetConfigName() { return "Load/Store Unit"; }
      method GetHelpText (line 413) | public string GetHelpText() { return ""; }
      method LSU (line 415) | public LSU(GoldmontPlus intelCpu)
      method GetColumns (line 420) | public string[] GetColumns()
      method Initialize (line 425) | public void Initialize()
      method Update (line 445) | public MonitoringUpdateResults Update()
      method computeMetrics (line 465) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class MemMachineClear (line 483) | public class MemMachineClear : MonitoringConfig
      method GetConfigName (line 486) | public string GetConfigName() { return "Machine Clears (Mem)"; }
      method GetHelpText (line 487) | public string GetHelpText() { return ""; }
      method MemMachineClear (line 489) | public MemMachineClear(GoldmontPlus intelCpu)
      method GetColumns (line 494) | public string[] GetColumns()
      method Initialize (line 499) | public void Initialize()
      method Update (line 519) | public MonitoringUpdateResults Update()
      method computeMetrics (line 539) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class MachineClear1 (line 556) | public class MachineClear1 : MonitoringConfig
      method GetConfigName (line 559) | public string GetConfigName() { return "Machine Clears 1"; }
      method GetHelpText (line 560) | public string GetHelpText() { return ""; }
      method MachineClear1 (line 562) | public MachineClear1(GoldmontPlus intelCpu)
      method GetColumns (line 567) | public string[] GetColumns()
      method Initialize (line 572) | public void Initialize()
      method Update (line 592) | public MonitoringUpdateResults Update()
      method computeMetrics (line 612) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class MemLoads (line 630) | public class MemLoads : MonitoringConfig
      method GetConfigName (line 633) | public string GetConfigName() { return "Load Data Sources"; }
      method GetHelpText (line 634) | public string GetHelpText() { return ""; }
      method MemLoads (line 636) | public MemLoads(GoldmontPlus intelCpu)
      method GetColumns (line 641) | public string[] GetColumns()
      method Initialize (line 646) | public void Initialize()
      method Update (line 666) | public MonitoringUpdateResults Update()
      method computeMetrics (line 686) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class OffcoreL2 (line 706) | public class OffcoreL2 : MonitoringConfig
      method GetConfigName (line 709) | public string GetConfigName() { return "Offcore: L2"; }
      method GetHelpText (line 710) | public string GetHelpText() { return ""; }
      method OffcoreL2 (line 712) | public OffcoreL2(GoldmontPlus intelCpu)
      method GetColumns (line 717) | public string[] GetColumns()
      method Initialize (line 722) | public void Initialize()
      method Update (line 745) | public MonitoringUpdateResults Update()
      method computeMetrics (line 765) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class BackendStall (line 786) | public class BackendStall : MonitoringConfig
      method GetConfigName (line 789) | public string GetConfigName() { return "Backend Stalls"; }
      method GetHelpText (line 790) | public string GetHelpText() { return ""; }
      method BackendStall (line 792) | public BackendStall(GoldmontPlus intelCpu)
      method GetColumns (line 797) | public string[] GetColumns()
      method Initialize (line 802) | public void Initialize()
      method Update (line 822) | public MonitoringUpdateResults Update()
      method computeMetrics (line 842) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class Decode (line 859) | public class Decode : MonitoringConfig
      method GetConfigName (line 862) | public string GetConfigName() { return "Decode/Uops"; }
      method GetHelpText (line 863) | public string GetHelpText() { return ""; }
      method Decode (line 865) | public Decode(GoldmontPlus intelCpu)
      method GetColumns (line 870) | public string[] GetColumns()
      method Initialize (line 875) | public void Initialize()
      method Update (line 895) | public MonitoringUpdateResults Update()
      method computeMetrics (line 915) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class IssueHistogram (line 932) | public class IssueHistogram : MonitoringConfig
      method GetConfigName (line 935) | public string GetConfigName() { return "Rename/Alloc Histogram"; }
      method GetHelpText (line 936) | public string GetHelpText() { return ""; }
      method IssueHistogram (line 938) | public IssueHistogram(GoldmontPlus intelCpu)
      method GetColumns (line 943) | public string[] GetColumns()
      method Initialize (line 948) | public void Initialize()
      method Update (line 961) | public MonitoringUpdateResults Update()
      method computeMetrics (line 981) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class OffcoreHitm (line 1004) | public class OffcoreHitm : MonitoringConfig
      method GetConfigName (line 1007) | public string GetConfigName() { return "Offcore: C2C"; }
      method GetHelpText (line 1008) | public string GetHelpText() { return ""; }
      method OffcoreHitm (line 1010) | public OffcoreHitm(GoldmontPlus intelCpu)
      method GetColumns (line 1015) | public string[] GetColumns()
      method Initialize (line 1020) | public void Initialize()
      method Update (line 1043) | public MonitoringUpdateResults Update()
      method computeMetrics (line 1063) | private string[] computeMetrics(string label, NormalizedCoreCounterD...

FILE: pmcreader-plugin/PmcReader/Intel/Haswell.cs
  class Haswell (line 6) | public class Haswell : ModernIntelCpu
    method Haswell (line 8) | public Haswell()
    class ALUPortUtilization (line 37) | public class ALUPortUtilization : MonitoringConfig
      method GetConfigName (line 40) | public string GetConfigName() { return "ALU Port Util/Pwr"; }
      method ALUPortUtilization (line 42) | public ALUPortUtilization(Haswell intelCpu)
      method GetColumns (line 47) | public string[] GetColumns()
      method Initialize (line 52) | public void Initialize()
      method Update (line 75) | public MonitoringUpdateResults Update()
      method GetHelpText (line 94) | public string GetHelpText()
      method computeMetrics (line 102) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LSPortUtilization (line 120) | public class LSPortUtilization : MonitoringConfig
      method GetConfigName (line 123) | public string GetConfigName() { return "AGU/LS Port Utilization"; }
      method LSPortUtilization (line 125) | public LSPortUtilization(Haswell intelCpu)
      method GetColumns (line 130) | public string[] GetColumns()
      method Initialize (line 135) | public void Initialize()
      method Update (line 160) | public MonitoringUpdateResults Update()
      method GetHelpText (line 177) | public string GetHelpText()
      method computeMetrics (line 184) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class LoadDtlbConfig (line 198) | public class LoadDtlbConfig : MonitoringConfig
      method GetConfigName (line 201) | public string GetConfigName() { return "DTLB (loads)"; }
      method LoadDtlbConfig (line 203) | public LoadDtlbConfig(Haswell intelCpu)
      method GetColumns (line 208) | public string[] GetColumns()
      method Initialize (line 213) | public void Initialize()
      method Update (line 234) | public MonitoringUpdateResults Update()
      method GetHelpText (line 251) | public string GetHelpText()
      method computeMetrics (line 256) | private string[] computeMetrics(string label, NormalizedCoreCounterD...
    class MoveElimConfig (line 274) | public class MoveElimConfig : MonitoringConfig
      method GetConfigName (line 277) | public string GetConfigName() { return "Move Elimination"; }
      method MoveElimConfig (line 279) | public MoveElimConfig(Haswell intelCpu)
      method GetColumns (line 284) | public string[] GetColumns()
      method Initialize (line 289) | public void Initialize()
      method Update (line 310) | public MonitoringUpdateResults Update()
      method GetHelpText (line 327) | public string GetHelpText()
Copy disabled (too large) Download .json
Condensed preview — 1926 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (62,987K chars).
[
  {
    "path": ".dockerignore",
    "chars": 316,
    "preview": "**/.classpath\n**/.dockerignore\n**/.env\n**/.git\n**/.gitignore\n**/.project\n**/.settings\n**/.toolstarget\n**/.vs\n**/.vscode\n"
  },
  {
    "path": ".editorconfig",
    "chars": 97,
    "preview": "[*.cs]\n\n# CA1031: Do not catch general exception types\ndotnet_diagnostic.CA1031.severity = none\n"
  },
  {
    "path": ".editorconfig.inferred",
    "chars": 6530,
    "preview": "# Rules in this file were initially inferred by Visual Studio IntelliCode from the D:\\Code\\CapFrameX codebase based on b"
  },
  {
    "path": ".gitignore",
    "chars": 4468,
    "preview": "## Ignore Visual Studio temporary files, build results, and files generated by popular Visual Studio add-ons.\n\n# User-sp"
  },
  {
    "path": "AGENTS.md",
    "chars": 2620,
    "preview": "# Repository Guidelines\n\n## Project Structure & Module Organization\n\n- `source/` holds the main C# and C++ projects; the"
  },
  {
    "path": "CLAUDE.md",
    "chars": 4133,
    "preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
  },
  {
    "path": "CapFrameX.sln",
    "chars": 45920,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.14.368"
  },
  {
    "path": "Jenkinsfile",
    "chars": 3861,
    "preview": "pipeline {\n    agent {\n        label 'WinAgent'\n    }\n\n    stages {\n        stage('Nuget restore') {\n            steps {"
  },
  {
    "path": "LICENSE",
    "chars": 9425,
    "preview": "MIT License\n\nCopyright (c) 2018-2024 DevTechProfile\n\nPermission is hereby granted, free of charge, to any person obtaini"
  },
  {
    "path": "PORTABLE_MODE.md",
    "chars": 3709,
    "preview": "# CapFrameX Portable Mode\n\n## Overview\n\nCapFrameX now supports a portable mode that allows the application to run entire"
  },
  {
    "path": "README.md",
    "chars": 22529,
    "preview": "![Screenshot](images/CX_Header_Logo_Wide.jpg)\n# CapFrameX\nFrametimes capture and analysis tool based on Intel's [Present"
  },
  {
    "path": "benchlab-service/PMD_Service.deps.json",
    "chars": 33539,
    "preview": "{\n  \"runtimeTarget\": {\n    \"name\": \".NETCoreApp,Version=v9.0\",\n    \"signature\": \"\"\n  },\n  \"compilationOptions\": {},\n  \"t"
  },
  {
    "path": "benchlab-service/PMD_Service.runtimeconfig.json",
    "chars": 384,
    "preview": "{\n  \"runtimeOptions\": {\n    \"tfm\": \"net9.0\",\n    \"framework\": {\n      \"name\": \"Microsoft.NETCore.App\",\n      \"version\": "
  },
  {
    "path": "benchlab-service/appsettings.Development.json",
    "chars": 129,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n   "
  },
  {
    "path": "benchlab-service/appsettings.json",
    "chars": 129,
    "preview": "{\n  \"Logging\": {\n    \"LogLevel\": {\n      \"Default\": \"Information\",\n      \"Microsoft.Hosting.Lifetime\": \"Information\"\n   "
  },
  {
    "path": "capframex-linux/.gitignore",
    "chars": 290,
    "preview": "# Build outputs\nbuild/\nbin/\nobj/\n\n# .NET\n*.user\n*.suo\n.vs/\n*.DotSettings.user\n\n# IDE\n.idea/\n*.swp\n*~\n\n# CMake\nCMakeFiles"
  },
  {
    "path": "capframex-linux/.vscode/launch.json",
    "chars": 1646,
    "preview": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            \"name\": \"CapFrameX (Debug)\",\n            \"type\":"
  },
  {
    "path": "capframex-linux/.vscode/settings.json",
    "chars": 432,
    "preview": "{\n    \"dotnet.defaultSolution\": \"src/app/CapFrameX.sln\",\n    \"omnisharp.enableRoslynAnalyzers\": true,\n    \"omnisharp.ena"
  },
  {
    "path": "capframex-linux/.vscode/tasks.json",
    "chars": 2378,
    "preview": "{\n    \"version\": \"2.0.0\",\n    \"tasks\": [\n        {\n            \"label\": \"build\",\n            \"command\": \"dotnet\",\n      "
  },
  {
    "path": "capframex-linux/CLAUDE.md",
    "chars": 4086,
    "preview": "# CLAUDE.md\n\nThis file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.\n\n## "
  },
  {
    "path": "capframex-linux/CMakeLists.txt",
    "chars": 1151,
    "preview": "cmake_minimum_required(VERSION 3.16)\nproject(capframex-linux VERSION 1.0.0 LANGUAGES C CXX)\n\nset(CMAKE_C_STANDARD 11)\nse"
  },
  {
    "path": "capframex-linux/CX Logo/CapFrameX.ai",
    "chars": 200830,
    "preview": "%PDF-1.5\r%\r\n1 0 obj\r<</Metadata 2 0 R/OCProperties<</D<</ON[25 0 R]/Order 26 0 R/RBGroups[]>>/OCGs[25 0 R]>>/Pages 3 0 R"
  },
  {
    "path": "capframex-linux/CX Logo/CapFrameXLogoOnly.ai",
    "chars": 174789,
    "preview": "%PDF-1.5\r%\r\n1 0 obj\r<</Metadata 2 0 R/OCProperties<</D<</ON[24 0 R]/Order 25 0 R/RBGroups[]>>/OCGs[24 0 R]>>/Pages 3 0 R"
  },
  {
    "path": "capframex-linux/Display_Timing_Tracker_DEV_PLAN.md",
    "chars": 3966,
    "preview": "# DRM Display Timing Tracker - Development Plan\n\n## Goal\nTrack time between display changes (page flips) on Linux, compa"
  },
  {
    "path": "capframex-linux/OVERLAY_DEV_PLAN.md",
    "chars": 24556,
    "preview": "# CapFrameX Linux In-Game Overlay Development Plan\n\n## Executive Summary\n\nThis document outlines the implementation plan"
  },
  {
    "path": "capframex-linux/README.md",
    "chars": 3791,
    "preview": "# CapFrameX Linux\n\nA Linux-native solution for frametime capture and analysis, conceptually based on CapFrameX for Windo"
  },
  {
    "path": "capframex-linux/capframex.desktop",
    "chars": 344,
    "preview": "[Desktop Entry]\nName=CapFrameX\nComment=Frametime capture and analysis for Linux\nExec=/home/capframex/Code/CapFrameX/capf"
  },
  {
    "path": "capframex-linux/scripts/build.sh",
    "chars": 2753,
    "preview": "#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(dirname \"$SCRIPT_DIR\")\"\nB"
  },
  {
    "path": "capframex-linux/scripts/capframex-daemon.service",
    "chars": 464,
    "preview": "[Unit]\nDescription=CapFrameX Game Detection Daemon\nDocumentation=https://github.com/DevTechProfile/CapFrameX\nAfter=graph"
  },
  {
    "path": "capframex-linux/scripts/install-layer.sh",
    "chars": 1539,
    "preview": "#!/bin/bash\n# Install CapFrameX Vulkan layer globally for Proton/Steam compatibility\n\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirnam"
  },
  {
    "path": "capframex-linux/scripts/install.sh",
    "chars": 2532,
    "preview": "#!/bin/bash\nset -e\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURCE[0]}\")\" && pwd)\"\nPROJECT_ROOT=\"$(dirname \"$SCRIPT_DIR\")\"\nB"
  },
  {
    "path": "capframex-linux/scripts/run-dev.sh",
    "chars": 1323,
    "preview": "#!/bin/bash\n# Development run script - runs daemon and app without installing\n\nSCRIPT_DIR=\"$(cd \"$(dirname \"${BASH_SOURC"
  },
  {
    "path": "capframex-linux/scripts/uninstall-layer.sh",
    "chars": 1155,
    "preview": "#!/bin/bash\n# Uninstall CapFrameX Vulkan layer\n\nset -e\n\n# System-wide installation paths\nSYSTEM_LIB=\"/usr/lib/libcapfram"
  },
  {
    "path": "capframex-linux/scripts/uninstall.sh",
    "chars": 1025,
    "preview": "#!/bin/bash\nset -e\n\nPREFIX=\"${PREFIX:-/usr/local}\"\nBINDIR=\"$PREFIX/bin\"\nLIBDIR=\"$PREFIX/lib\"\nDATADIR=\"$PREFIX/share\"\n\nec"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/App.axaml",
    "chars": 2964,
    "preview": "<Application xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/App.axaml.cs",
    "chars": 2781,
    "preview": "using Avalonia;\nusing Avalonia.Controls.ApplicationLifetimes;\nusing Avalonia.Markup.Xaml;\nusing CapFrameX.App.Views;\nusi"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/CapFrameX.App.csproj",
    "chars": 1469,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>WinExe</OutputType>\n    <TargetFramework>net8.0</Ta"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Program.cs",
    "chars": 499,
    "preview": "using Avalonia;\nusing Avalonia.X11;\n\nnamespace CapFrameX.App;\n\nclass Program\n{\n    [STAThread]\n    public static void Ma"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/ViewModels/AnalysisViewModel.cs",
    "chars": 9340,
    "preview": "using System.Collections.ObjectModel;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusi"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/ViewModels/CaptureViewModel.cs",
    "chars": 23774,
    "preview": "using System.Collections.ObjectModel;\nusing System.Diagnostics;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing Commun"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/ViewModels/CompareViewModel.cs",
    "chars": 7897,
    "preview": "using System.Collections.ObjectModel;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusi"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/ViewModels/MainViewModel.cs",
    "chars": 6453,
    "preview": "using System.Diagnostics;\nusing System.Timers;\nusing CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.I"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/ViewModels/SettingsViewModel.cs",
    "chars": 2213,
    "preview": "using CommunityToolkit.Mvvm.ComponentModel;\nusing CommunityToolkit.Mvvm.Input;\nusing CapFrameX.Core.Configuration;\nusing"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/AnalysisView.axaml",
    "chars": 10242,
    "preview": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/AnalysisView.axaml.cs",
    "chars": 179,
    "preview": "using Avalonia.Controls;\n\nnamespace CapFrameX.App.Views;\n\npublic partial class AnalysisView : UserControl\n{\n    public A"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/CaptureView.axaml",
    "chars": 17311,
    "preview": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/CaptureView.axaml.cs",
    "chars": 177,
    "preview": "using Avalonia.Controls;\n\nnamespace CapFrameX.App.Views;\n\npublic partial class CaptureView : UserControl\n{\n    public Ca"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/CompareView.axaml",
    "chars": 6217,
    "preview": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/CompareView.axaml.cs",
    "chars": 177,
    "preview": "using Avalonia.Controls;\n\nnamespace CapFrameX.App.Views;\n\npublic partial class CompareView : UserControl\n{\n    public Co"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/MainWindow.axaml",
    "chars": 4825,
    "preview": "<Window xmlns=\"https://github.com/avaloniaui\"\n        xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n        xml"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/MainWindow.axaml.cs",
    "chars": 1255,
    "preview": "using Avalonia.Controls;\nusing Avalonia.Data.Converters;\nusing Avalonia.Media;\nusing System.Globalization;\n\nnamespace Ca"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/SettingsPanel.axaml",
    "chars": 5667,
    "preview": "<UserControl xmlns=\"https://github.com/avaloniaui\"\n             xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\"\n "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/Views/SettingsPanel.axaml.cs",
    "chars": 181,
    "preview": "using Avalonia.Controls;\n\nnamespace CapFrameX.App.Views;\n\npublic partial class SettingsPanel : UserControl\n{\n    public "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.App/app.manifest",
    "chars": 186,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <asse"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Analysis/FrametimeAnalyzer.cs",
    "chars": 4993,
    "preview": "using CapFrameX.Shared.Models;\n\nnamespace CapFrameX.Core.Analysis;\n\n/// <summary>\n/// Analyzer for frametime data provid"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Analysis/StatisticsCalculator.cs",
    "chars": 5826,
    "preview": "using CapFrameX.Shared.Models;\n\nnamespace CapFrameX.Core.Analysis;\n\n/// <summary>\n/// Frametime statistics result\n/// </"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/CapFrameX.Core.csproj",
    "chars": 589,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>e"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Capture/DaemonClient.cs",
    "chars": 12304,
    "preview": "using System.Diagnostics;\nusing System.Reactive.Linq;\nusing System.Reactive.Subjects;\nusing CapFrameX.Shared.IPC;\nusing "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Capture/FrametimeReceiver.cs",
    "chars": 4454,
    "preview": "using System.Reactive.Linq;\nusing System.Reactive.Subjects;\nusing CapFrameX.Shared.Models;\n\nnamespace CapFrameX.Core.Cap"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Configuration/AppSettings.cs",
    "chars": 613,
    "preview": "namespace CapFrameX.Core.Configuration;\n\n/// <summary>\n/// Application settings model persisted to JSON\n/// </summary>\np"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Configuration/SettingsService.cs",
    "chars": 2753,
    "preview": "using System.Reactive.Linq;\nusing System.Reactive.Subjects;\nusing System.Text.Json;\n\nnamespace CapFrameX.Core.Configurat"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Data/Session.cs",
    "chars": 5359,
    "preview": "using System.Globalization;\nusing System.Text.Json;\nusing CapFrameX.Shared.Models;\n\nnamespace CapFrameX.Core.Data;\n\n/// "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Data/SessionManager.cs",
    "chars": 9581,
    "preview": "using CapFrameX.Core.Analysis;\nusing CapFrameX.Shared.Models;\n\nnamespace CapFrameX.Core.Data;\n\n/// <summary>\n/// Manages"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Hardware/CpuInfo.cs",
    "chars": 2052,
    "preview": "namespace CapFrameX.Core.Hardware;\n\n/// <summary>\n/// Static CPU information\n/// </summary>\npublic class CpuInfo\n{\n    /"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Hardware/GpuInfo.cs",
    "chars": 3407,
    "preview": "namespace CapFrameX.Core.Hardware;\n\n/// <summary>\n/// GPU type classification\n/// </summary>\npublic enum GpuType\n{\n    U"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Hardware/HardwareMonitor.cs",
    "chars": 3231,
    "preview": "namespace CapFrameX.Core.Hardware;\n\n/// <summary>\n/// Main hardware monitoring service combining Vulkan GPU enumeration "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Hardware/SysfsReader.cs",
    "chars": 14634,
    "preview": "namespace CapFrameX.Core.Hardware;\n\n/// <summary>\n/// Reads hardware information and metrics from Linux sysfs/hwmon inte"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Hardware/VulkanGpuEnumerator.cs",
    "chars": 5844,
    "preview": "using Silk.NET.Vulkan;\n\nnamespace CapFrameX.Core.Hardware;\n\n/// <summary>\n/// Enumerates GPUs using the Vulkan API for a"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/Hotkey/GlobalHotkeyService.cs",
    "chars": 8622,
    "preview": "using System.Reactive;\nusing System.Reactive.Linq;\nusing System.Reactive.Subjects;\nusing SharpHook;\nusing SharpHook.Nati"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Core/System/SystemInfoService.cs",
    "chars": 2659,
    "preview": "using CapFrameX.Core.Hardware;\n\nnamespace CapFrameX.Core.System;\n\npublic class SystemInfo\n{\n    public string CpuName { "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Shared/CapFrameX.Shared.csproj",
    "chars": 254,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <TargetFramework>net8.0</TargetFramework>\n    <ImplicitUsings>e"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Shared/IPC/Messages.cs",
    "chars": 2501,
    "preview": "using System.Runtime.InteropServices;\n\nnamespace CapFrameX.Shared.IPC;\n\n/// <summary>\n/// IPC Message types (must match "
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Shared/IPC/SocketClient.cs",
    "chars": 13587,
    "preview": "using System.Net.Sockets;\nusing System.Runtime.InteropServices;\nusing CapFrameX.Shared.Models;\n\nnamespace CapFrameX.Shar"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Shared/Models/CaptureSession.cs",
    "chars": 1607,
    "preview": "namespace CapFrameX.Shared.Models;\n\n/// <summary>\n/// Represents a captured frametime recording session\n/// </summary>\np"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Shared/Models/FrameData.cs",
    "chars": 1928,
    "preview": "namespace CapFrameX.Shared.Models;\n\n/// <summary>\n/// Represents a single frame timing measurement\n/// </summary>\npublic"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.Shared/Models/GameInfo.cs",
    "chars": 2822,
    "preview": "using System.ComponentModel;\nusing System.Runtime.CompilerServices;\n\nnamespace CapFrameX.Shared.Models;\n\n/// <summary>\n/"
  },
  {
    "path": "capframex-linux/src/app/CapFrameX.sln",
    "chars": 1882,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.31903"
  },
  {
    "path": "capframex-linux/src/app/FrameReceptionTest/FrameReceptionTest.csproj",
    "chars": 348,
    "preview": "<Project Sdk=\"Microsoft.NET.Sdk\">\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>net8.0</Targe"
  },
  {
    "path": "capframex-linux/src/app/FrameReceptionTest/Program.cs",
    "chars": 2916,
    "preview": "using CapFrameX.Shared.IPC;\nusing CapFrameX.Shared.Models;\n\nConsole.WriteLine(\"=== CapFrameX Frame Reception Test ===\");"
  },
  {
    "path": "capframex-linux/src/daemon/CMakeLists.txt",
    "chars": 590,
    "preview": "set(DAEMON_SOURCES\n    main.c\n    process_monitor.c\n    launcher_detect.c\n    ipc.c\n    config.c\n    ignore_list.c\n)\n\nse"
  },
  {
    "path": "capframex-linux/src/daemon/common.h",
    "chars": 4746,
    "preview": "#ifndef CAPFRAMEX_COMMON_H\n#define CAPFRAMEX_COMMON_H\n\n#include <stdint.h>\n#include <stdbool.h>\n#include <limits.h>\n#inc"
  },
  {
    "path": "capframex-linux/src/daemon/config.c",
    "chars": 4439,
    "preview": "#include \"config.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <sys/stat.h>\n#include <errno.h>\n"
  },
  {
    "path": "capframex-linux/src/daemon/config.h",
    "chars": 858,
    "preview": "#ifndef CAPFRAMEX_CONFIG_H\n#define CAPFRAMEX_CONFIG_H\n\n#include \"common.h\"\n\n// Configuration structure\ntypedef struct {\n"
  },
  {
    "path": "capframex-linux/src/daemon/ignore_list.c",
    "chars": 9472,
    "preview": "#include \"ignore_list.h\"\n#include \"config.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <string"
  },
  {
    "path": "capframex-linux/src/daemon/ignore_list.h",
    "chars": 840,
    "preview": "#ifndef CAPFRAMEX_IGNORE_LIST_H\n#define CAPFRAMEX_IGNORE_LIST_H\n\n#include \"common.h\"\n\n#define MAX_IGNORE_LIST 512\n\n// In"
  },
  {
    "path": "capframex-linux/src/daemon/ipc.c",
    "chars": 28582,
    "preview": "#include \"ipc.h\"\n#include \"ignore_list.h\"\n#include \"launcher_detect.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <"
  },
  {
    "path": "capframex-linux/src/daemon/ipc.h",
    "chars": 3249,
    "preview": "#ifndef CAPFRAMEX_IPC_H\n#define CAPFRAMEX_IPC_H\n\n#include \"common.h\"\n\n// Client types\ntypedef enum {\n    CLIENT_TYPE_UNK"
  },
  {
    "path": "capframex-linux/src/daemon/launcher_detect.c",
    "chars": 12260,
    "preview": "#define _GNU_SOURCE\n#include \"launcher_detect.h\"\n#include \"process_monitor.h\"\n#include \"ignore_list.h\"\n#include <stdio.h"
  },
  {
    "path": "capframex-linux/src/daemon/launcher_detect.h",
    "chars": 1801,
    "preview": "#ifndef CAPFRAMEX_LAUNCHER_DETECT_H\n#define CAPFRAMEX_LAUNCHER_DETECT_H\n\n#include \"common.h\"\n\n// Known launcher types\nty"
  },
  {
    "path": "capframex-linux/src/daemon/main.c",
    "chars": 20797,
    "preview": "#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <signal.h>\n#include <unistd.h>\n#include <getopt.h>\n#"
  },
  {
    "path": "capframex-linux/src/daemon/process_monitor.c",
    "chars": 9047,
    "preview": "#include \"process_monitor.h\"\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <unistd.h>\n#include <di"
  },
  {
    "path": "capframex-linux/src/daemon/process_monitor.h",
    "chars": 1326,
    "preview": "#ifndef CAPFRAMEX_PROCESS_MONITOR_H\n#define CAPFRAMEX_PROCESS_MONITOR_H\n\n#include \"common.h\"\n\n// Callback function type "
  },
  {
    "path": "capframex-linux/src/layer/CMakeLists.txt",
    "chars": 921,
    "preview": "set(LAYER_SOURCES\n    layer.c\n    swapchain.c\n    timing.c\n    data_export.c\n    ipc_client.c\n)\n\nset(LAYER_HEADERS\n    l"
  },
  {
    "path": "capframex-linux/src/layer/capframex_layer.json",
    "chars": 408,
    "preview": "{\n    \"file_format_version\": \"1.0.0\",\n    \"layer\": {\n        \"name\": \"VK_LAYER_capframex_capture\",\n        \"type\": \"GLOB"
  },
  {
    "path": "capframex-linux/src/layer/data_export.c",
    "chars": 7800,
    "preview": "#include \"data_export.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h>\n#include <sys/sta"
  },
  {
    "path": "capframex-linux/src/layer/data_export.h",
    "chars": 1239,
    "preview": "#ifndef CAPFRAMEX_DATA_EXPORT_H\n#define CAPFRAMEX_DATA_EXPORT_H\n\n#include \"timing.h\"\n#include <stdbool.h>\n#include <stdd"
  },
  {
    "path": "capframex-linux/src/layer/ipc_client.c",
    "chars": 12741,
    "preview": "#include \"ipc_client.h\"\n#include \"swapchain.h\"\n#include \"../daemon/common.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#in"
  },
  {
    "path": "capframex-linux/src/layer/ipc_client.h",
    "chars": 1299,
    "preview": "#ifndef CAPFRAMEX_IPC_CLIENT_H\n#define CAPFRAMEX_IPC_CLIENT_H\n\n#include \"timing.h\"\n#include <stdbool.h>\n#include <stdint"
  },
  {
    "path": "capframex-linux/src/layer/layer.c",
    "chars": 15220,
    "preview": "#include \"layer.h\"\n#include \"swapchain.h\"\n#include \"timing.h\"\n#include \"ipc_client.h\"\n\n#include <stdio.h>\n#include <stdl"
  },
  {
    "path": "capframex-linux/src/layer/layer.h",
    "chars": 2802,
    "preview": "#ifndef CAPFRAMEX_LAYER_H\n#define CAPFRAMEX_LAYER_H\n\n#include <vulkan/vulkan.h>\n#include <vulkan/vk_layer.h>\n#include <s"
  },
  {
    "path": "capframex-linux/src/layer/swapchain.c",
    "chars": 13854,
    "preview": "#include \"swapchain.h\"\n#include \"timing.h\"\n#include \"ipc_client.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <str"
  },
  {
    "path": "capframex-linux/src/layer/swapchain.h",
    "chars": 1864,
    "preview": "#ifndef CAPFRAMEX_SWAPCHAIN_H\n#define CAPFRAMEX_SWAPCHAIN_H\n\n#include \"layer.h\"\n\n// Maximum number of tracked swapchains"
  },
  {
    "path": "capframex-linux/src/layer/timing.c",
    "chars": 5416,
    "preview": "#include \"timing.h\"\n#include \"ipc_client.h\"\n\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n#include <time.h"
  },
  {
    "path": "capframex-linux/src/layer/timing.h",
    "chars": 2061,
    "preview": "#ifndef CAPFRAMEX_TIMING_H\n#define CAPFRAMEX_TIMING_H\n\n#include <stdint.h>\n#include <stdbool.h>\n\n// Frame data structure"
  },
  {
    "path": "dev-plans/MCP_Integration_DevPlan.md",
    "chars": 13151,
    "preview": "# CapFrameX MCP Integration – Development Plan\n\n> **Architecture:** The MCP server is hosted **in-process** inside `CapF"
  },
  {
    "path": "dev-plans/MCP_Server_Implementation_NET472_WPF_App.md",
    "chars": 6519,
    "preview": "# MCP Server for a .NET Framework 4.7.2 WPF App – Technical Implementation\n\n## Goal\n\nAn existing WPF desktop app (.NET F"
  },
  {
    "path": "dev-plans/PantherLake_IMC_Clock_PawnIO_PR_Plan.md",
    "chars": 25946,
    "preview": "# Dev Plan: Panther Lake IMC Memory Clock via PawnIO.Modules\n\nStatus: research/implementation plan\nOwner context: CapFra"
  },
  {
    "path": "overlay-templates/OverlayEntryConfiguration_0.json",
    "chars": 76485,
    "preview": "{\"OverlayEntries\":[{\"Identifier\":\"CaptureServiceStatus\",\"SortKey\":\"0_0_0_0_0\",\"OverlayEntryType\":1,\"Description\":\"Captur"
  },
  {
    "path": "pmcreader-plugin/AGENTS.md",
    "chars": 2308,
    "preview": "# Repository Guidelines\n\n## Project Structure & Module Organization\n- `PmcReader/` contains the core performance counter"
  },
  {
    "path": "pmcreader-plugin/CapFrameX.PmcReader.Merged.csproj",
    "chars": 9270,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "pmcreader-plugin/CapFrameX.PmcReader.Plugin.csproj",
    "chars": 3599,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "pmcreader-plugin/PmcReader/.gitattributes",
    "chars": 66,
    "preview": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/.gitignore",
    "chars": 14,
    "preview": "bin/\nobj/\n.vs/"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Amd10hCpu.cs",
    "chars": 10442,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Windows.Forms;\nusing System.Drawing;\n\nnamespace PmcReader.AMD\n{\n   "
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Amd15hCpu.cs",
    "chars": 29409,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Windows.Forms;\nusing System.Drawing;\n\nnamespace PmcReader.AMD\n{\n   "
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Amd16hCpu.cs",
    "chars": 21219,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Windows.Forms;\nusing System.Drawing;\n\nnamespace PmcReader.AMD\n{\n   "
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Amd17hCpu.cs",
    "chars": 44742,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Diagnostics;\nusing System.Drawing;\nusing System.Windows.Forms;\n\nnam"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Amd19hCpu.cs",
    "chars": 74760,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Diagnostics;\nusing System.Windows.Forms;\n\nnamespace PmcReader.AMD\n{"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Bulldozer.cs",
    "chars": 21696,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class Bulldozer : Amd1"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Jaguar.cs",
    "chars": 13743,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class Jaguar : Amd16hC"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/JaguarL2.cs",
    "chars": 3416,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class JaguarL2 : Amd16"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/JaguarNorthbridge.cs",
    "chars": 6257,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class JaguarNorthbridg"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/K10.cs",
    "chars": 33853,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class K10 : Amd10hCpu\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Piledriver.cs",
    "chars": 36056,
    "preview": "using System;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/PiledriverNorthbridge.cs",
    "chars": 27562,
    "preview": "using System;\nusing System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class Pi"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen.cs",
    "chars": 4240,
    "preview": "using System;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen1.cs",
    "chars": 22194,
    "preview": "using System;\nusing System.Runtime.InteropServices.WindowsRuntime;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen2.cs",
    "chars": 120590,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics.PerformanceData;\nusing PmcReader.Interop;\n\nnam"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen2DataFabric.cs",
    "chars": 15809,
    "preview": "using System;\nusing System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class Ze"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen2L3Cache.cs",
    "chars": 22126,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen3.cs",
    "chars": 33816,
    "preview": "using System;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class Zen3 : Amd17hCpu\n    {\n        publi"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen3L3Cache.cs",
    "chars": 9994,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen4.cs",
    "chars": 49996,
    "preview": "using System.Collections.Generic;\n\nnamespace PmcReader.AMD\n{\n    public class Zen4 : Amd19hCpu\n    {\n        public Zen"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen4DataFabric.cs",
    "chars": 13450,
    "preview": "using System;\nusing System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n    public class Ze"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen4L3Cache.cs",
    "chars": 24019,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen5.cs",
    "chars": 30990,
    "preview": "using System.Collections.Generic;\n\nnamespace PmcReader.AMD\n{\n    public class Zen5 : Amd19hCpu\n    {\n        public Zen"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen5DataFabric.cs",
    "chars": 26029,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.AMD\n{\n    public class Zen"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen5Diagnostics.cs",
    "chars": 12083,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\n\nnamespace PmcReader.AMD\n{\n    /// <summary>\n    /// Di"
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/Zen5L3Cache.cs",
    "chars": 25447,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n "
  },
  {
    "path": "pmcreader-plugin/PmcReader/AMD/ZenL3Cache.cs",
    "chars": 10127,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing PmcReader.Interop;\n\nnamespace PmcReader.AMD\n{\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/App.config",
    "chars": 424,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n<configuration>\n    <startup> \n        <supportedRuntime version=\"v4.0\" sku=\".N"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Cpu.cs",
    "chars": 2259,
    "preview": "using System;\nusing System.Threading;\nusing System.Windows.Forms;\n\nnamespace PmcReader\n{\n    public interface Monitorin"
  },
  {
    "path": "pmcreader-plugin/PmcReader/GenericMonitoringArea.cs",
    "chars": 15056,
    "preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Globalization;\nusing System.IO;\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/HaswellForm.Designer.cs",
    "chars": 26999,
    "preview": "namespace PmcReader\n{\n    partial class HaswellForm\n    {\n        /// <summary>\n        /// Required designer variable."
  },
  {
    "path": "pmcreader-plugin/PmcReader/HaswellForm.cs",
    "chars": 18563,
    "preview": "using System;\nusing System.Diagnostics.Eventing.Reader;\nusing System.Threading;\nusing System.Threading.Tasks;\nusing Sys"
  },
  {
    "path": "pmcreader-plugin/PmcReader/HaswellForm.resx",
    "chars": 5889,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/AlderLake.cs",
    "chars": 53865,
    "preview": "using System;\nusing System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.Intel\n{\n    public class "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/AlderLakeL3.cs",
    "chars": 5081,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    public class "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/AlderLakeUncore.cs",
    "chars": 2856,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    public class AlderLakeUncore : ModernIntelCpu\n "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/ArrowLake.cs",
    "chars": 106189,
    "preview": "using System;\nusing System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.Intel\n{\n    public class "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/ArrowLakeL3.cs",
    "chars": 6464,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    /// <summary>\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/GoldmontPlus.cs",
    "chars": 56527,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.Intel\n{\n    public class GoldmontPlus :"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/Haswell.cs",
    "chars": 47669,
    "preview": "using PmcReader.Interop;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    public class Haswell : Mode"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/HaswellClientArb.cs",
    "chars": 6866,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    public class HaswellClientArb : HaswellClientUn"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/HaswellClientL3.cs",
    "chars": 10670,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    public class HaswellClientL3 : HaswellClientUnc"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/HaswellClientUncore.cs",
    "chars": 2616,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    public class HaswellClientUncore : ModernIntelC"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/HaswellEL3.cs",
    "chars": 14946,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    /// <summary>"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/MeteorLake.cs",
    "chars": 28753,
    "preview": "using System;\nusing System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.Intel\n{\n    public class "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/MeteorLakeArb.cs",
    "chars": 12634,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    public class "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/MeteorLakeL3.cs",
    "chars": 5257,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    public class "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/MeteorLakeUncore.cs",
    "chars": 3270,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    // Really just a container for MSR numbers\n    "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/ModernIntelCpu.cs",
    "chars": 74002,
    "preview": "using System;\nusing System.Diagnostics;\nusing PmcReader.Interop;\nusing System.Windows.Forms;\nusing System.Security.Poli"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/SandyBridge.cs",
    "chars": 54345,
    "preview": "using System;\nusing PmcReader.Interop;\n\nnamespace PmcReader.Intel\n{\n    public class SandyBridge : ModernIntelCpu\n    {"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/SandyBridgeEL3.cs",
    "chars": 36127,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    /// <summary>\n    /// The uncore from hell?\n   "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/SandyBridgeUncore.cs",
    "chars": 28046,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\n\nnamespace PmcReader.Intel\n{\n    /// <summary>"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/Skylake.cs",
    "chars": 67783,
    "preview": "using System.Collections.Generic;\nusing PmcReader.Interop;\n\nnamespace PmcReader.Intel\n{\n    public class Skylake : Mode"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/SkylakeClientArb.cs",
    "chars": 7117,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    public class SkylakeClientArb : SkylakeClientUn"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/SkylakeClientL3.cs",
    "chars": 12047,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Collections.Generic;\nusing System.Runtime.InteropServices.WindowsRu"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Intel/SkylakeClientUncore.cs",
    "chars": 3384,
    "preview": "using PmcReader.Interop;\nusing System;\n\nnamespace PmcReader.Intel\n{\n    public class SkylakeClientUncore : ModernIntelC"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Interop/AdvApi32.cs",
    "chars": 5599,
    "preview": "// From LibreHardwareMonitor\n// Mozilla Public License 2.0\n// If a copy of the MPL was not distributed with this file, "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Interop/Kernel32.cs",
    "chars": 47183,
    "preview": "// From LibreHardwareMonitor\n// Mozilla Public License 2.0\n// If a copy of the MPL was not distributed with this file, Y"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Interop/KernelDriver.cs",
    "chars": 6514,
    "preview": "// From LibreHardwareMonitor\n// Mozilla Public License 2.0\n// If a copy of the MPL was not distributed with this file, "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Interop/OpCode.cs",
    "chars": 9497,
    "preview": "// From LibreHardwareMonitor\n// Mozilla Public License 2.0\n// If a copy of the MPL was not distributed with this file, "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Interop/Ring0.cs",
    "chars": 19900,
    "preview": "// From LibreHardwareMonitor, with some modifications\n// Mozilla Public License 2.0\n// If a copy of the MPL was not dist"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Interop/ThreadAffinity.cs",
    "chars": 825,
    "preview": "// From LibreHardwareMonitor\n// Mozilla Public License 2.0\n// If a copy of the MPL was not distributed with this file, Y"
  },
  {
    "path": "pmcreader-plugin/PmcReader/LICENSE",
    "chars": 11357,
    "preview": "                                 Apache License\n                           Version 2.0, January 2004\n                   "
  },
  {
    "path": "pmcreader-plugin/PmcReader/PmcDiagnostics.cs",
    "chars": 1177,
    "preview": "using System;\nusing System.IO;\n\nnamespace PmcReader\n{\n    /// <summary>\n    /// Diagnostic logging for PMC reader debugg"
  },
  {
    "path": "pmcreader-plugin/PmcReader/PmcReader.csproj",
    "chars": 7437,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
  },
  {
    "path": "pmcreader-plugin/PmcReader/PmcReader.sln",
    "chars": 1095,
    "preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 16\nVisualStudioVersion = 16.0.3001"
  },
  {
    "path": "pmcreader-plugin/PmcReader/PmcReaderInterop.cs",
    "chars": 1095,
    "preview": "using PmcReader.Interop;\n\nnamespace PmcReader\n{\n    public static class PmcReaderInterop\n    {\n        public static voi"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Program.cs",
    "chars": 564,
    "preview": "using PmcReader.Interop;\nusing System;\nusing System.Windows.Forms;\n\nnamespace PmcReader\n{\n    static class Program\n    "
  },
  {
    "path": "pmcreader-plugin/PmcReader/Properties/AssemblyInfo.cs",
    "chars": 1425,
    "preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Properties/Resources.Designer.cs",
    "chars": 2782,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Properties/Resources.resx",
    "chars": 5494,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The prim"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Properties/Settings.Designer.cs",
    "chars": 1064,
    "preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code w"
  },
  {
    "path": "pmcreader-plugin/PmcReader/Properties/Settings.settings",
    "chars": 240,
    "preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"http://schemas.microsoft.com/VisualStudio/2004/01/settings\""
  },
  {
    "path": "pmcreader-plugin/PmcReader/README.md",
    "chars": 6212,
    "preview": "# MsrUtil\nPerformance Counter Reader\n\n# THIS SOFTWARE IS CONSIDERED EXPERIMENTAL. OUTPUT FROM THE APPLICATION MAY BE INA"
  },
  {
    "path": "pmcreader-plugin/PmcReader/app.manifest",
    "chars": 1974,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<assembly manifestVersion=\"1.0\" xmlns=\"urn:schemas-microsoft-com:asm.v1\">\n  <ass"
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/App.xaml",
    "chars": 307,
    "preview": "<Application x:Class=\"PmcReader.TestApp.App\"\n             xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/App.xaml.cs",
    "chars": 110,
    "preview": "using System.Windows;\n\nnamespace PmcReader.TestApp\n{\n    public partial class App : Application\n    {\n    }\n}\n"
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/MainWindow.xaml",
    "chars": 3605,
    "preview": "<Window x:Class=\"PmcReader.TestApp.MainWindow\"\n        xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\""
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/MainWindow.xaml.cs",
    "chars": 10132,
    "preview": "using CapFrameX.Contracts.Sensor;\nusing CapFrameX.PmcReader.Plugin;\nusing System;\nusing System.Collections.Generic;\nusin"
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/PmcReader.TestApp.csproj",
    "chars": 3400,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuil"
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/SensorRow.cs",
    "chars": 1246,
    "preview": "using System.ComponentModel;\n\nnamespace PmcReader.TestApp\n{\n    public class SensorRow : INotifyPropertyChanged\n    {\n  "
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp/packages.config",
    "chars": 138,
    "preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"System.Reactive\" version=\"6.1.0\" targetFramework=\"net47"
  },
  {
    "path": "pmcreader-plugin/PmcReader.TestApp.sln",
    "chars": 5443,
    "preview": "Microsoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio Version 17\nVisualStudioVersion = 17.0.31903."
  },
  {
    "path": "pmcreader-plugin/PmcReaderInterop.Forwarder.cs",
    "chars": 1164,
    "preview": "namespace CapFrameX.PmcReader.Plugin\n{\n    public static class PmcReaderInterop\n    {\n        public static void Open()\n"
  },
  {
    "path": "pmcreader-plugin/PmcReaderSensorEntry.cs",
    "chars": 523,
    "preview": "using CapFrameX.Contracts.Sensor;\n\nnamespace CapFrameX.PmcReader.Plugin\n{\n    public class PmcReaderSensorEntry : ISenso"
  },
  {
    "path": "pmcreader-plugin/PmcReaderSensorPlugin.cs",
    "chars": 36102,
    "preview": "using CapFrameX.Contracts.Sensor;\nusing PmcReader;\nusing PmcReader.AMD;\nusing PmcReader.Intel;\nusing System;\nusing Syste"
  },
  {
    "path": "pmcreader-plugin/intel-perfmon/.github/CODEOWNERS",
    "chars": 1014,
    "preview": "# Default owner. Later matches take precedence. Refer to the below link for additional details.\n# https://docs.github.co"
  }
]

// ... and 1726 more files (download for full content)

About this extraction

This page contains the full source code of the DevTechProfile/CapFrameX GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1926 files (54.5 MB), approximately 14.4M tokens, and a symbol index with 12384 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!