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
================================================

# 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

# Overlay

# Analysis

# Aggregation

# Comparison


# Sensor

# Report table (Excel)

# Cloud

# 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)

* 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)

* 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)

* 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
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAmAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8ABZ6O+cuxV2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVOfLnlDXvMUzJplsZI4zSW4c8Ik+bHv7DfMXU6zHhHr
Pw6uTptHkzH0D49GYL+RfmTiOV/Zhu4BlI+/gM1h7exfzZfZ+t2Y7By/zo/b+ps/kX5gAJOoWYA3
JJk/5ox/l7F/Nl9i/wAg5P50ftYRFobz39za2lxHcQ2zFDdpy9JiNvhJFT7bZV2x7SYOz8UZ5QeK
fKIri9/N0eesciLv3KOp6Vc6eyerRkk+y61pXwNe+HsL2l03aQl4dxnHnGVXXeKJ2/HcwhMS5ILO
hZtgEkACpOwAxVlupflnrml6Cda1K5s7OAIH9CV5PW5N9mPiIyOZ8K/PNZj7VxzycERInv2r7+Ts
snZWSGPjkYgd29/dzYiDUVzZutdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsV
dirsVdir2rzjq8/kTyHpljoarFd3XGL6zQEqxTnLLQ9XY9K/wzktNj/NaiUp8h+AHrNTk/K6eMYc
z+CXlL+bvOEjF312/wCR68bmVB9ysBnQjQYR/BH5B546/Mf45fNTm8yeaJonhm1q/likUrJG91My
spFCGBehByQ0WEGxGPyDE63KRRlL5lBRT3UMfpwTyQp14o7KK/Qcq1PZelzy4suLHOXfKMSftDjE
A8wyLSb2HVLNtOvjylC/C56sB0YH+Zc8t9o+x8vZGqjrdJtjvl0if5p/oS/Z3ONkjwniCRX1jNZX
LW8u5G6P2ZexGeldi9sYu0NOMuP/ADh1ie79XeG+MhIWHpn5X+SLe2t/8W69xhtYFM1kktAoVRX6
w9ewp8H3+GYvauvJPg4+Z5/q/W9H2VoAB42TkOX6/wBTD/P/AJ3ufNmrckLR6PasRY2525djK4/m
b8Bt41zeztAMMd/qPNwe0dec0tvpHJjebR1jsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdir
sVdirsVdirsVdirsVetfniinRPL7/tLIyj5GJT/DOX7FP72b0/bQ/dQeS51DzDsVdiq6OR45FkjY
q6GqsOxGU6jTwzYzjmOKEhRCCHonkXyrd+cNRi1LVIhHoen7FP8Alom6soP8n833eNOJ0fZWLseM
44pGWTIef82P8I9/n1dr2R2YMh4pfQPt8v1ob81fP41q5OgaQ4Gi2jBbiWPZZ5E7LT/daEbeJ36U
zfdldn8P7yf1H7P2uT2r2hxfu4fSPt/YwIAAUGb10TsKuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
V2KuxV2KuxV2KuxV2KuxV2KuxV6z+eSv+iPLzA/AGkDD3MaU/Uc5jsQ/vJvTdtf3cHk2dO8y7FXY
qyPyP5Ou/M+rLbpWOyho97cgfYT+UV/aboPv7Zg67WxwQv8AiPIObodFLPOv4RzLNPzP86W2jWCe
TPLdISkYjvZYjT0oyP7pSP23rVz/ABJppuztHLNPxsm/d+v9Tue0dZHDDwce3f8Aq/Wwn9E2N9o0
TacoWeAUoacmP7Sv7+GcdH2g1nZvak4aw3iyH4Afwyh5dJD7yHkfEIl6mPEEEgihBoQeoIz1WExK
IlE2C5DsmrsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVey6Hqnlzz
/wCVYPL+rzfV9XtQgjNQrl4xxWWKuzclNGX5+xzldRhyaTMckBcD+KL1OnzY9XhGOZqY/FhAt+Qt
yGPHWUK9ibcg/wDJw5kD2gH8z7f2OOewD/P+z9q3/lQ13/1eI/8AkQ3/ADXj/L4/mfb+xf5AP8/7
P2u/5UNd/wDV4j/5EN/zXj/L4/mfb+xf5AP8/wCz9qZ+add0z8ufLMWhaIVfWrpSRIQCyk7PcSDx
7IP4DMTBinrMvHP6B+K/W5efLDR4uCH1H8X+p4sObM0krGSWQl5JGNWZmNSST1JOdVCIiKDys5GR
so3StSlsLkSLVom2lj8R/UZofaPsDH2lg4DtkjvCXce73Hr8+jVOHEE213TI7mEapZfGGHKVV/aX
+Ye475xHsj2/k0eY6DV+mjUb/hP833H+E/oO1WKdeksdz1hyHYq7FXYq7FXYq7FXYq7FXYq7FXYq
7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq4gHAquNQ1JQFW8nVRsAJXAH45UdPDuDaNRPvLv0jqn/Ldc
f8jZP64Py+PuHyT+Yyd5+bv0jqn/AC3XH/I2T+uP5fH3D5L+Yyd5+ajI0kshlmdpZDsXdizbe5rl
kYCPINcpmXMtZNi7FW+UgFFdlHgCQPwzGyaTFOXFKMSe8gK0BQUzIV2FXYq7FXYq7FXYq7FXYq7F
XYq7FXYq7FXYq7FXYq7FXYq7FUy8t2VrfeYdNs7o0tri5iim3pVXcAivavTKNTMwxSkOYBb9NATy
xieRIROu+Y9VuLi9sGgtrS0WRolso7WBDCEfor8PUDfDueVTlGn00QBKyT32d/tpv1GpkSY0AO6h
t9lqnkywhl1J766VHstLj+szLMVWJ5KhII3ZvhAeVlBr2rh12Qxhwj6pbfrPwDHQ4xKfEfpjv+of
NU886bHbalBf24hFpqsKzqLV0kgSdfhuIkeMlCFk326AjIdn5jKJibuJrfnXQ/Js7QwiMhIVUhe3
K+o+acaVcW1no/luaa4s7O0Y3cuoNc2yXDTpHOq+moMcjM3FiBuPnmLnEpZMgAkT6ao1W3vcnAYx
x4yTED1XYu9/cxSCS0ufMBkt4fSspbpmggbfjEzkoh+S7ZDtuc4dnZTfrGI7jvrm6jUkEyMdhvSH
vZVc0W5Wajn4Fi9OnXvxFcq7FxTiblinjuPM5OO/hxGmER5JhYqxisVQxqWadnVo1dpBHwPBajrQ
mm4znu3M1Z9QZcZEY4RGpygIcfH6zR5WBex9zXLr8EqZhPcyGGPgskh9KLwBOwztNJxYNNHxpcRh
AcUu+hvJsqgmd/bQmydIfT52JFSjKXdfsyllB5fC/SvbOP7K7Tyx1kZ5fE4NVe0hLggfqxCMiOG5
Y9pAH6ubXA779VDSGt1e4e4UPCIfiqK0DOilh7gHNv7U+OceIYJGOQ5tq6kY8khE+RIFpmDtStFa
CztLtJ1DXDpKIiQDRIh9sf6xIpmp1Xa89Zm08sMjHFCWMz85ZD9B/qgG/eFJsiuSX2ThWLNMsNV+
2yeoOo2pQ51famMzxACEsnq5RnwdDvdj5M5Bq5kDyikwnAX7Sx+mBudqUGDsrEYYzcJYzfKU+P43
Z+Sgbcme6JYWl7oEOvXOnLJqumxSrY2ahETUVgAIkaPYv9X5fHxHx9Otcx9RllDIcYl6JVZ/mX0v
+l07neafFGeMZDH1xuh/OrrX9Hr3vP3mlnkeeUgySsXbiAoqxqaBaAD2GbqEaFOmnKzbWSYuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVtWZWDKSGBqCNiCMBCgsuvl856jbSW819b3fNbdZqJEZ
29dkWNXmEYkJBZeXJ81UPAhKwCOffW3ldO1n4840SDy7r386tQh8q+aP0ddWKSxRafJMhuuTBQzx
yiGKrcefEmXmo6EVPUZZPV4TISN8VbfKz91NcNLmETHYRvf50PvtC2+kaxfWtrpEF5bzW3qTXFvH
XZWDiB2EhQfCxA2DU75OWbHGRmQQdh+nlbCOHJKIgCCNz+jmuutD1yVLLS7q5gX6s7xWto7ASI8s
SXMgIC8ifjCkGvxfCMEc+MEzAO/M+48P48t0ywZCBAkbch7xxfjz2Q+n+X9Uk+p3FuyRtcTyQ25Y
Ns0ADSO3wkBUG5B39sdZLDlxzxZBxQMfUO8S6c738vm0R0kpAf0iR8uaw+W7qNSZ7iCKYLJJLA7N
6icHCHmqqaVZtu3XwyyGogABEGtgyOll1ICKHlbXPRR3ligS0l4qHYoyM7hef2a8dg1fDfMKcdKZ
zkY8RyxAl1EgAaFXXUpGhnRO3cpaboesXs817bSRN6VyITdVAjLs3H1F+HjxBZamn7Qw5MGmjp/y
0gfCMK4blfD3XfF9vSmENHKY25A1+Px1U5vL2radbXF27KjxFYriPdnpcLtWqlDWvjX9eWZYafUC
OOQuIIlHpRidqogiv2JyaSQjZ6UrSeUdftRcQhULgLFJGjBmYMUPwgjpzZVJ7NthyZMGXgMv4JcU
fI1IfcTsem7KWhyA8uX4/TXvdcaBra3jwTXMIkSCWMMzgKYIVVnKkjcem/PxIr32zFxaPRxj6YUD
kGTa/rJ58+8VX0/BB0Uga26n5fs3W23l/U4p1SKSDlJFzVmBkUqRyooKNzbanwA77eOZGsGHPDhn
xUD0lKBvlzjKJrfqfPuQdHImv1rtM8uarrrQvBNAWkViFCsnELLHFRhHHTd5l3++gyOGOHRxMY8d
X1lKXTvnInkOScGilP6evv7wP0ozUbLzZaLYa5PdqrWNvG9kY6IYY19EoqqEVDtdITxqDU1Nctxz
wSMoAfUTfnz/AOJLkZIZ4iMyfpAry5f8UGNTTSzzSTykGSVi78VVFqxqaKoVR8gM2EIiIoOvnIyN
lZkmLsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiq8TTgkrK4LCjEMRUdKZAwB6MhMjq5J7l
CCk0i04gUdhTjuvQ9u2A44nokZJDq4zTlixlcs1eTFjU8jVqmvc9cPAO5HGe9ct3eLXjcSirFzR2
3YjiT168dsHhR7gy8WXeViyzJCYVkdYWNWjDEKTSlSOnTCYC7piJmqtovIWZmdizijMSSSCa74RA
BTMlck9whqk0inbdWYdKU6HtxH3YDjieiRkkOrvWnqW9V+RJYtyNSzULEmvU0FceCPcjjPe4z3BR
UMzlFYMqljQMBQECvUDbHw49y+JLva9WYUpK44140Y7VPI0+nfHgHcvGe9v6xc+kIvWk9IdI+TcR
8PHpWn2TT5Y+HG7pPiSqrcZ7glj60lXXg55HdaUod9xTHw49y+JLvdHNPFT0pXjIBAKsRQN16eOJ
gDzCBMjkW1urtVCrPIFCGMAOwARuq9eh8MHhx7k+JLvU8sYOxV2KuxV2KuxV2KuxV2KuxV2KuxV2
KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2K
uxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Ku
xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux
V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV
2KuxV2Ks5/5U152/31b/API4f0zU/wAtafvPydt/IufuHzd/yprzt/vq3/5HD+mP8tafvPyX+Rc/
cPm7/lTXnb/fVv8A8jh/TH+WtP3n5L/IufuHzd/yprzt/vq3/wCRw/pj/LWn7z8l/kXP3D5u/wCV
Nedv99W//I4f0x/lrT95+S/yLn7h83f8qa87f76t/wDkcP6Y/wAtafvPyX+Rc/cPm7/lTXnb/fVv
/wAjh/TH+WtP3n5L/IufuHzd/wAqa87f76t/+Rw/pj/LWn7z8l/kXP3D5u/5U152/wB9W/8AyOH9
Mf5a0/efkv8AIufuHzd/yprzt/vq3/5HD+mP8tafvPyX+Rc/cPm7/lTXnb/fVv8A8jh/TH+WtP3n
5L/IufuHzd/yprzt/vq3/wCRw/pj/LWn7z8l/kXP3D5u/wCVNedv99W//I4f0x/lrT95+S/yLn7h
83f8qa87f76t/wDkcP6Y/wAtafvPyX+Rc/cPm7/lTXnb/fVv/wAjh/TH+WtP3n5L/IufuHzd/wAq
a87f76t/+Rw/pj/LWn7z8l/kXP3D5u/5U152/wB9W/8AyOH9Mf5a0/efkv8AIufuHzd/yprzt/vq
3/5HD+mP8tafvPyX+Rc/cPm7/lTXnb/fVv8A8jh/TH+WtP3n5L/IufuHzd/yprzt/vq3/wCRw/pj
/LWn7z8l/kXP3D5u/wCVNedv99W//I4f0x/lrT95+S/yLn7h83f8qa87f76t/wDkcP6Y/wAtafvP
yX+Rc/cPm7/lTXnb/fVv/wAjh/TH+WtP3n5L/IufuHzd/wAqa87f76t/+Rw/pj/LWn7z8l/kXP3D
5u/5U152/wB9W/8AyOH9Mf5a0/efkv8AIufuHzd/yprzt/vq3/5HD+mP8tafvPyX+Rc/cPm7/lTX
nb/fVv8A8jh/TH+WtP3n5L/IufuHzd/yprzt/vq3/wCRw/pj/LWn7z8l/kXP3D5u/wCVNedv99W/
/I4f0x/lrT95+S/yLn7h83f8qa87f76t/wDkcP6Y/wAtafvPyX+Rc/cPm7/lTXnb/fVv/wAjh/TH
+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"&wQmģɩ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>1R 3[Py
$&N&YeOrl=&8_||3(ZjU$c8N(Bxje-vHRnʙ|}ȟz<