dissect.target 3.20.2.dev49__tar.gz → 3.20.2.dev51__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (698) hide show
  1. {dissect_target-3.20.2.dev49/dissect.target.egg-info → dissect_target-3.20.2.dev51}/PKG-INFO +1 -1
  2. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/container.py +1 -1
  3. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/exceptions.py +11 -0
  4. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/compat/path_310.py +19 -102
  5. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/compat/path_311.py +18 -106
  6. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/compat/path_312.py +15 -100
  7. dissect_target-3.20.2.dev51/dissect/target/helpers/compat/path_313.py +400 -0
  8. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/compat/path_39.py +15 -96
  9. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/compat/path_common.py +5 -5
  10. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/config.py +3 -0
  11. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/configutil.py +0 -1
  12. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/fsutil.py +18 -14
  13. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/polypath.py +9 -1
  14. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/utils.py +10 -6
  15. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/kape.py +5 -2
  16. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/container/docker.py +8 -6
  17. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/vpn/wireguard.py +3 -3
  18. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/clfs.py +0 -2
  19. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/datetime.py +15 -6
  20. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/target.py +2 -2
  21. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/fsutils.py +5 -3
  22. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51/dissect.target.egg-info}/PKG-INFO +1 -1
  23. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect.target.egg-info/SOURCES.txt +1 -0
  24. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_fsutil.py +70 -9
  25. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/vpn/test_wireguard.py +7 -5
  26. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_recyclebin.py +16 -13
  27. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_container.py +7 -4
  28. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/COPYRIGHT +0 -0
  29. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/LICENSE +0 -0
  30. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/MANIFEST.in +0 -0
  31. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/README.md +0 -0
  32. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/__init__.py +0 -0
  33. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/__init__.py +0 -0
  34. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/asdf.py +0 -0
  35. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/ewf.py +0 -0
  36. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/fortifw.py +0 -0
  37. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/hdd.py +0 -0
  38. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/hds.py +0 -0
  39. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/qcow2.py +0 -0
  40. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/raw.py +0 -0
  41. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/split.py +0 -0
  42. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/vdi.py +0 -0
  43. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/vhd.py +0 -0
  44. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/vhdx.py +0 -0
  45. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/containers/vmdk.py +0 -0
  46. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/data/autocompletion/target_bash_completion.sh +0 -0
  47. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystem.py +0 -0
  48. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/__init__.py +0 -0
  49. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/ad1.py +0 -0
  50. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/btrfs.py +0 -0
  51. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/cb.py +0 -0
  52. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/config.py +0 -0
  53. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/cpio.py +0 -0
  54. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/dir.py +0 -0
  55. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/exfat.py +0 -0
  56. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/extfs.py +0 -0
  57. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/fat.py +0 -0
  58. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/ffs.py +0 -0
  59. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/itunes.py +0 -0
  60. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/jffs.py +0 -0
  61. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/ntfs.py +0 -0
  62. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/overlay.py +0 -0
  63. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/smb.py +0 -0
  64. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/squashfs.py +0 -0
  65. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/tar.py +0 -0
  66. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/vmfs.py +0 -0
  67. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/vmtar.py +0 -0
  68. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/xfs.py +0 -0
  69. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/filesystems/zip.py +0 -0
  70. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/__init__.py +0 -0
  71. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/cache.py +0 -0
  72. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/compat/__init__.py +0 -0
  73. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/cyber.py +0 -0
  74. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/data/windowsZones.xml +0 -0
  75. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/descriptor_extensions.py +0 -0
  76. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/docs.py +0 -0
  77. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/hashutil.py +0 -0
  78. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/keychain.py +0 -0
  79. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/lazy.py +0 -0
  80. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/loaderutil.py +0 -0
  81. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/localeutil.py +0 -0
  82. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/mount.py +0 -0
  83. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/mui.py +0 -0
  84. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/nfs/__init__.py +0 -0
  85. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/nfs/client.py +0 -0
  86. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/nfs/demo.py +0 -0
  87. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/nfs/nfs3.py +0 -0
  88. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/nfs/serializer.py +0 -0
  89. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/protobuf.py +0 -0
  90. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/record.py +0 -0
  91. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/record_modifier.py +0 -0
  92. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/regutil.py +0 -0
  93. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/shell_application_ids.py +0 -0
  94. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/shell_folder_ids.py +0 -0
  95. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/sunrpc/__init__.py +0 -0
  96. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/sunrpc/client.py +0 -0
  97. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/sunrpc/serializer.py +0 -0
  98. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/helpers/sunrpc/sunrpc.py +0 -0
  99. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loader.py +0 -0
  100. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/__init__.py +0 -0
  101. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/ab.py +0 -0
  102. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/ad1.py +0 -0
  103. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/asdf.py +0 -0
  104. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/cb.py +0 -0
  105. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/cyber.py +0 -0
  106. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/dir.py +0 -0
  107. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/hyperv.py +0 -0
  108. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/itunes.py +0 -0
  109. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/libvirt.py +0 -0
  110. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/local.py +0 -0
  111. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/log.py +0 -0
  112. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/mqtt.py +0 -0
  113. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/multiraw.py +0 -0
  114. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/ova.py +0 -0
  115. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/overlay.py +0 -0
  116. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/ovf.py +0 -0
  117. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/phobos.py +0 -0
  118. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/profile.py +0 -0
  119. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/proxmox.py +0 -0
  120. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/pvm.py +0 -0
  121. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/pvs.py +0 -0
  122. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/raw.py +0 -0
  123. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/remote.py +0 -0
  124. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/res.py +0 -0
  125. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/smb.py +0 -0
  126. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/tanium.py +0 -0
  127. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/tar.py +0 -0
  128. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/target.py +0 -0
  129. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/utm.py +0 -0
  130. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/vb.py +0 -0
  131. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/vbox.py +0 -0
  132. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/velociraptor.py +0 -0
  133. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/vma.py +0 -0
  134. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/vmwarevm.py +0 -0
  135. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/vmx.py +0 -0
  136. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/loaders/xva.py +0 -0
  137. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugin.py +0 -0
  138. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/__init__.py +0 -0
  139. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/__init__.py +0 -0
  140. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/av/__init__.py +0 -0
  141. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/av/mcafee.py +0 -0
  142. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/av/sophos.py +0 -0
  143. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/av/symantec.py +0 -0
  144. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/av/trendmicro.py +0 -0
  145. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/__init__.py +0 -0
  146. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/brave.py +0 -0
  147. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/browser.py +0 -0
  148. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/chrome.py +0 -0
  149. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/chromium.py +0 -0
  150. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/edge.py +0 -0
  151. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/firefox.py +0 -0
  152. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/browser/iexplore.py +0 -0
  153. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/container/__init__.py +0 -0
  154. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/database/__init__.py +0 -0
  155. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/editor/__init__.py +0 -0
  156. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/editor/editor.py +0 -0
  157. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/editor/windowsnotepad.py +0 -0
  158. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/other/__init__.py +0 -0
  159. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/other/env.py +0 -0
  160. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/productivity/__init__.py +0 -0
  161. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/productivity/msoffice.py +0 -0
  162. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/productivity/sevenzip.py +0 -0
  163. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/productivity/winrar.py +0 -0
  164. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/remoteaccess/__init__.py +0 -0
  165. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/remoteaccess/anydesk.py +0 -0
  166. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/remoteaccess/remoteaccess.py +0 -0
  167. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/remoteaccess/teamviewer.py +0 -0
  168. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/shell/__init__.py +0 -0
  169. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/shell/powershell.py +0 -0
  170. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/shell/wget.py +0 -0
  171. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/ssh/__init__.py +0 -0
  172. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/ssh/openssh.py +0 -0
  173. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/ssh/opensshd.py +0 -0
  174. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/ssh/putty.py +0 -0
  175. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/ssh/ssh.py +0 -0
  176. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/virtualization/__init__.py +0 -0
  177. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/virtualization/vmware_workstation.py +0 -0
  178. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/vpn/__init__.py +0 -0
  179. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/vpn/openvpn.py +0 -0
  180. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webhosting/__init__.py +0 -0
  181. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webhosting/cpanel.py +0 -0
  182. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/__init__.py +0 -0
  183. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/apache.py +0 -0
  184. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/caddy.py +0 -0
  185. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/citrix.py +0 -0
  186. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/iis.py +0 -0
  187. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/nginx.py +0 -0
  188. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/apps/webserver/webserver.py +0 -0
  189. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/__init__.py +0 -0
  190. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/docker.py +0 -0
  191. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/esxi.py +0 -0
  192. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/hyperv.py +0 -0
  193. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/parallels.py +0 -0
  194. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/proxmox.py +0 -0
  195. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/qemu.py +0 -0
  196. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/virtuozzo.py +0 -0
  197. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/vmware_workstation.py +0 -0
  198. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/child/wsl.py +0 -0
  199. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/__init__.py +0 -0
  200. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/acquire_handles.py +0 -0
  201. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/acquire_hash.py +0 -0
  202. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/icat.py +0 -0
  203. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/ntfs/__init__.py +0 -0
  204. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/ntfs/mft.py +0 -0
  205. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/ntfs/mft_timeline.py +0 -0
  206. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/ntfs/usnjrnl.py +0 -0
  207. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/ntfs/utils.py +0 -0
  208. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/resolver.py +0 -0
  209. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/unix/__init__.py +0 -0
  210. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/unix/capability.py +0 -0
  211. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/unix/suid.py +0 -0
  212. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/walkfs.py +0 -0
  213. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/filesystem/yara.py +0 -0
  214. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/__init__.py +0 -0
  215. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/config.py +0 -0
  216. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/example.py +0 -0
  217. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/loaders.py +0 -0
  218. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/osinfo.py +0 -0
  219. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/plugins.py +0 -0
  220. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/scrape.py +0 -0
  221. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/general/users.py +0 -0
  222. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/__init__.py +0 -0
  223. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/default/__init__.py +0 -0
  224. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/default/_os.py +0 -0
  225. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/default/network.py +0 -0
  226. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/__init__.py +0 -0
  227. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/_os.py +0 -0
  228. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/applications.py +0 -0
  229. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/__init__.py +0 -0
  230. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/_os.py +0 -0
  231. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  232. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/citrix/_os.py +0 -0
  233. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/citrix/history.py +0 -0
  234. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/freebsd/__init__.py +0 -0
  235. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/freebsd/_os.py +0 -0
  236. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/ios/__init__.py +0 -0
  237. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/ios/_os.py +0 -0
  238. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/openbsd/__init__.py +0 -0
  239. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/openbsd/_os.py +0 -0
  240. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/osx/__init__.py +0 -0
  241. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/osx/_os.py +0 -0
  242. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/osx/network.py +0 -0
  243. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/bsd/osx/user.py +0 -0
  244. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/cronjobs.py +0 -0
  245. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/datetime.py +0 -0
  246. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/esxi/__init__.py +0 -0
  247. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/esxi/_os.py +0 -0
  248. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/etc/__init__.py +0 -0
  249. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/etc/etc.py +0 -0
  250. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/generic.py +0 -0
  251. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/history.py +0 -0
  252. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/__init__.py +0 -0
  253. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/_os.py +0 -0
  254. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/android/__init__.py +0 -0
  255. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/android/_os.py +0 -0
  256. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/cmdline.py +0 -0
  257. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/__init__.py +0 -0
  258. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/_os.py +0 -0
  259. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/apt.py +0 -0
  260. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/dpkg.py +0 -0
  261. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/proxmox/__init__.py +0 -0
  262. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/proxmox/_os.py +0 -0
  263. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/proxmox/vm.py +0 -0
  264. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/snap.py +0 -0
  265. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/vyos/__init__.py +0 -0
  266. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/debian/vyos/_os.py +0 -0
  267. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/environ.py +0 -0
  268. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/fortios/__init__.py +0 -0
  269. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/fortios/_keys.py +0 -0
  270. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/fortios/_os.py +0 -0
  271. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/fortios/generic.py +0 -0
  272. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/fortios/locale.py +0 -0
  273. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/iptables.py +0 -0
  274. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/modules.py +0 -0
  275. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/netstat.py +0 -0
  276. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/network.py +0 -0
  277. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/network_managers.py +0 -0
  278. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/proc.py +0 -0
  279. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/processes.py +0 -0
  280. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/redhat/__init__.py +0 -0
  281. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/redhat/_os.py +0 -0
  282. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/redhat/yum.py +0 -0
  283. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/services.py +0 -0
  284. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/sockets.py +0 -0
  285. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/suse/__init__.py +0 -0
  286. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/suse/_os.py +0 -0
  287. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/linux/suse/zypper.py +0 -0
  288. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/locale.py +0 -0
  289. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/locate/__init__.py +0 -0
  290. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/locate/gnulocate.py +0 -0
  291. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/locate/locate.py +0 -0
  292. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/locate/mlocate.py +0 -0
  293. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/locate/plocate.py +0 -0
  294. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/__init__.py +0 -0
  295. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/atop.py +0 -0
  296. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/audit.py +0 -0
  297. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/auth.py +0 -0
  298. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/helpers.py +0 -0
  299. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/journal.py +0 -0
  300. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/lastlog.py +0 -0
  301. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/messages.py +0 -0
  302. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/log/utmp.py +0 -0
  303. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/packagemanager.py +0 -0
  304. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/shadow.py +0 -0
  305. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/unix/trash.py +0 -0
  306. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/__init__.py +0 -0
  307. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/_os.py +0 -0
  308. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/activitiescache.py +0 -0
  309. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/adpolicy.py +0 -0
  310. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/amcache.py +0 -0
  311. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/catroot.py +0 -0
  312. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/cim.py +0 -0
  313. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/credential/__init__.py +0 -0
  314. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/credential/credhist.py +0 -0
  315. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/credential/lsa.py +0 -0
  316. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/credential/sam.py +0 -0
  317. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/defender/__init__.py +0 -0
  318. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/defender/_plugin.py +0 -0
  319. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/defender/mplog.py +0 -0
  320. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/defender/quarantine.py +0 -0
  321. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/__init__.py +0 -0
  322. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/blob.py +0 -0
  323. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/crypto.py +0 -0
  324. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/dpapi.py +0 -0
  325. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/__init__.py +0 -0
  326. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/credhist.py +0 -0
  327. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/empty.py +0 -0
  328. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/keychain.py +0 -0
  329. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/keyprovider.py +0 -0
  330. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/keyprovider/lsa.py +0 -0
  331. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/dpapi/master_key.py +0 -0
  332. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/env.py +0 -0
  333. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/exchange/__init__.py +0 -0
  334. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/exchange/exchange.py +0 -0
  335. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/generic.py +0 -0
  336. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/jumplist.py +0 -0
  337. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/lnk.py +0 -0
  338. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/locale.py +0 -0
  339. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/__init__.py +0 -0
  340. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/amcache.py +0 -0
  341. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/etl.py +0 -0
  342. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/evt.py +0 -0
  343. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/evtx.py +0 -0
  344. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/mssql.py +0 -0
  345. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/pfro.py +0 -0
  346. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/log/schedlgu.py +0 -0
  347. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/network.py +0 -0
  348. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/notifications.py +0 -0
  349. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/prefetch.py +0 -0
  350. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/recyclebin.py +0 -0
  351. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/__init__.py +0 -0
  352. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/applications.py +0 -0
  353. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/appxdebugkeys.py +0 -0
  354. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/auditpol.py +0 -0
  355. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/bam.py +0 -0
  356. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/cam.py +0 -0
  357. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/cit.py +0 -0
  358. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/clsid.py +0 -0
  359. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/firewall.py +0 -0
  360. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/mru.py +0 -0
  361. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/muicache.py +0 -0
  362. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/nethist.py +0 -0
  363. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/recentfilecache.py +0 -0
  364. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/regf.py +0 -0
  365. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/runkeys.py +0 -0
  366. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/shellbags.py +0 -0
  367. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/shimcache.py +0 -0
  368. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/trusteddocs.py +0 -0
  369. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/usb.py +0 -0
  370. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/regf/userassist.py +0 -0
  371. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/registry.py +0 -0
  372. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/services.py +0 -0
  373. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/sru.py +0 -0
  374. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/startupinfo.py +0 -0
  375. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/syscache.py +0 -0
  376. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/tasks/__init__.py +0 -0
  377. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/tasks/_plugin.py +0 -0
  378. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/tasks/job.py +0 -0
  379. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/tasks/records.py +0 -0
  380. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/tasks/xml.py +0 -0
  381. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/thumbcache.py +0 -0
  382. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/ual.py +0 -0
  383. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/wer.py +0 -0
  384. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/plugins/os/windows/wua_history.py +0 -0
  385. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/report.py +0 -0
  386. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/__init__.py +0 -0
  387. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/build_pluginlist.py +0 -0
  388. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/dd.py +0 -0
  389. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/diff.py +0 -0
  390. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/dump/__init__.py +0 -0
  391. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/dump/run.py +0 -0
  392. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/dump/state.py +0 -0
  393. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/dump/utils.py +0 -0
  394. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/fs.py +0 -0
  395. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/info.py +0 -0
  396. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/logging.py +0 -0
  397. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/mount.py +0 -0
  398. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/query.py +0 -0
  399. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/reg.py +0 -0
  400. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/shell.py +0 -0
  401. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/utils.py +0 -0
  402. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/tools/yara.py +0 -0
  403. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volume.py +0 -0
  404. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/__init__.py +0 -0
  405. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/bde.py +0 -0
  406. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/ddf.py +0 -0
  407. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/disk.py +0 -0
  408. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/luks.py +0 -0
  409. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/lvm.py +0 -0
  410. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/md.py +0 -0
  411. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect/target/volumes/vmfs.py +0 -0
  412. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect.target.egg-info/dependency_links.txt +0 -0
  413. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect.target.egg-info/entry_points.txt +0 -0
  414. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect.target.egg-info/requires.txt +0 -0
  415. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/dissect.target.egg-info/top_level.txt +0 -0
  416. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/pyproject.toml +0 -0
  417. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/setup.cfg +0 -0
  418. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/__init__.py +0 -0
  419. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/_docs/Makefile +0 -0
  420. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/_docs/conf.py +0 -0
  421. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/_docs/index.rst +0 -0
  422. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/_utils.py +0 -0
  423. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/conftest.py +0 -0
  424. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/containers/__init__.py +0 -0
  425. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/containers/test_fortifw.py +0 -0
  426. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/containers/test_split.py +0 -0
  427. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/__init__.py +0 -0
  428. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_btrfs.py +0 -0
  429. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_cb.py +0 -0
  430. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_config.py +0 -0
  431. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_cpio.py +0 -0
  432. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_dir.py +0 -0
  433. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_exfat.py +0 -0
  434. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_extfs.py +0 -0
  435. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_fat.py +0 -0
  436. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_ffs.py +0 -0
  437. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_jffs2.py +0 -0
  438. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_ntfs.py +0 -0
  439. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_overlay.py +0 -0
  440. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_smb.py +0 -0
  441. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_tar.py +0 -0
  442. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_vmtar.py +0 -0
  443. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_xfs.py +0 -0
  444. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/filesystems/test_zip.py +0 -0
  445. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/__init__.py +0 -0
  446. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/sunrpc/test_client.py +0 -0
  447. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_cache.py +0 -0
  448. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_config.py +0 -0
  449. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_configutil.py +0 -0
  450. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_docs.py +0 -0
  451. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_hashutil.py +0 -0
  452. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_keychain.py +0 -0
  453. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_loaderutil.py +0 -0
  454. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_localeutil.py +0 -0
  455. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_modifier.py +0 -0
  456. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_protobuf.py +0 -0
  457. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_record.py +0 -0
  458. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_regutil.py +0 -0
  459. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/helpers/test_utils.py +0 -0
  460. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/__init__.py +0 -0
  461. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_ab.py +0 -0
  462. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_asdf.py +0 -0
  463. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_cb.py +0 -0
  464. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_dir.py +0 -0
  465. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_hyperv.py +0 -0
  466. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_itunes.py +0 -0
  467. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_kape.py +0 -0
  468. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_libvirt.py +0 -0
  469. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_local.py +0 -0
  470. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_log.py +0 -0
  471. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_mqtt.py +0 -0
  472. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_multiraw.py +0 -0
  473. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_ova.py +0 -0
  474. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_overlay.py +0 -0
  475. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_ovf.py +0 -0
  476. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_phobos.py +0 -0
  477. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_pvm.py +0 -0
  478. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_pvs.py +0 -0
  479. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_remote.py +0 -0
  480. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_smb.py +0 -0
  481. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_tanium.py +0 -0
  482. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_tar.py +0 -0
  483. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_utm.py +0 -0
  484. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_vbox.py +0 -0
  485. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_velociraptor.py +0 -0
  486. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_vmwarevm.py +0 -0
  487. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/loaders/test_vmx.py +0 -0
  488. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/__init__.py +0 -0
  489. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/__init__.py +0 -0
  490. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/av/__init__.py +0 -0
  491. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/av/test_mcafee.py +0 -0
  492. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/av/test_sophos.py +0 -0
  493. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/av/test_symantec.py +0 -0
  494. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/av/test_trendmicro.py +0 -0
  495. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/__init__.py +0 -0
  496. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/test_brave.py +0 -0
  497. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/test_chrome.py +0 -0
  498. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/test_chromium.py +0 -0
  499. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/test_edge.py +0 -0
  500. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/test_firefox.py +0 -0
  501. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/browser/test_iexplore.py +0 -0
  502. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/container/__init__.py +0 -0
  503. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/container/test_docker.py +0 -0
  504. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/editor/__init__.py +0 -0
  505. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/editor/test_windowsnotepad.py +0 -0
  506. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/other/__init__.py +0 -0
  507. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/other/test_envfile.py +0 -0
  508. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/productivity/__init__.py +0 -0
  509. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/productivity/test_msoffice.py +0 -0
  510. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/productivity/test_sevenzip.py +0 -0
  511. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/productivity/test_winrar.py +0 -0
  512. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/remoteaccess/__init__.py +0 -0
  513. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/remoteaccess/test_anydesk.py +0 -0
  514. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/remoteaccess/test_teamviewer.py +0 -0
  515. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/shell/__init__.py +0 -0
  516. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/shell/test_powershell.py +0 -0
  517. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/shell/test_wget.py +0 -0
  518. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/ssh/__init__.py +0 -0
  519. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/ssh/test_openssh.py +0 -0
  520. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/ssh/test_opensshd.py +0 -0
  521. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/ssh/test_putty.py +0 -0
  522. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/virtualization/__init__.py +0 -0
  523. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/virtualization/test_vmware_workstation.py +0 -0
  524. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/vpn/__init__.py +0 -0
  525. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/vpn/test_openvpn.py +0 -0
  526. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webhosting/__init__.py +0 -0
  527. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webhosting/test_cpanel.py +0 -0
  528. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/__init__.py +0 -0
  529. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/test_apache.py +0 -0
  530. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/test_caddy.py +0 -0
  531. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/test_citrix.py +0 -0
  532. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/test_iis.py +0 -0
  533. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/test_nginx.py +0 -0
  534. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/apps/webserver/test_webserver.py +0 -0
  535. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/__init__.py +0 -0
  536. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_docker.py +0 -0
  537. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_hyperv.py +0 -0
  538. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_parallels.py +0 -0
  539. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_qemu.py +0 -0
  540. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_virtuozzo.py +0 -0
  541. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_vmware_workstation.py +0 -0
  542. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/child/test_wsl.py +0 -0
  543. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/__init__.py +0 -0
  544. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/ntfs/__init__.py +0 -0
  545. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/ntfs/test_mft.py +0 -0
  546. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/ntfs/test_usnjrnl.py +0 -0
  547. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/test_acquire_handles.py +0 -0
  548. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/test_acquire_hash.py +0 -0
  549. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/test_icat.py +0 -0
  550. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/test_resolver.py +0 -0
  551. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/test_walkfs.py +0 -0
  552. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/test_yara.py +0 -0
  553. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/unix/__init__.py +0 -0
  554. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/unix/test_capability.py +0 -0
  555. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/filesystem/unix/test_suid.py +0 -0
  556. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/__init__.py +0 -0
  557. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/test_config.py +0 -0
  558. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/test_default.py +0 -0
  559. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/test_network.py +0 -0
  560. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/test_plugins.py +0 -0
  561. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/test_scrape.py +0 -0
  562. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/general/test_users.py +0 -0
  563. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/__init__.py +0 -0
  564. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/__init__.py +0 -0
  565. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/__init__.py +0 -0
  566. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/citrix/__init__.py +0 -0
  567. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/citrix/test__os.py +0 -0
  568. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/citrix/test_history.py +0 -0
  569. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/osx/__init__.py +0 -0
  570. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/osx/test__os.py +0 -0
  571. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/osx/test_network.py +0 -0
  572. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/bsd/osx/test_user.py +0 -0
  573. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/esxi/__init__.py +0 -0
  574. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/esxi/test__os.py +0 -0
  575. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/__init__.py +0 -0
  576. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/android/__init__.py +0 -0
  577. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/android/test__os.py +0 -0
  578. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/debian/__init__.py +0 -0
  579. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/debian/proxmox/__init__.py +0 -0
  580. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/debian/proxmox/test__os.py +0 -0
  581. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/debian/test_apt.py +0 -0
  582. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/debian/test_dpkg.py +0 -0
  583. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/debian/test_snap.py +0 -0
  584. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/fortios/__init__.py +0 -0
  585. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/fortios/test__os.py +0 -0
  586. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/fortios/test_keys.py +0 -0
  587. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/redhat/__init__.py +0 -0
  588. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/redhat/test_yum.py +0 -0
  589. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/suse/__init__.py +0 -0
  590. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/suse/test_zypper.py +0 -0
  591. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test__os.py +0 -0
  592. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_cmdline.py +0 -0
  593. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_environ.py +0 -0
  594. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_iptables.py +0 -0
  595. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_modules.py +0 -0
  596. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_netstat.py +0 -0
  597. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_network.py +0 -0
  598. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_proc.py +0 -0
  599. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_processes.py +0 -0
  600. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_services.py +0 -0
  601. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/linux/test_sockets.py +0 -0
  602. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/locate/__init__.py +0 -0
  603. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/locate/test_gnulocate.py +0 -0
  604. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/locate/test_mlocate.py +0 -0
  605. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/locate/test_plocate.py +0 -0
  606. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/__init__.py +0 -0
  607. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_atop.py +0 -0
  608. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_audit.py +0 -0
  609. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_auth.py +0 -0
  610. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_helpers.py +0 -0
  611. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_journal.py +0 -0
  612. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_lastlog.py +0 -0
  613. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_messages.py +0 -0
  614. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/log/test_utmp.py +0 -0
  615. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test__os.py +0 -0
  616. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_applications.py +0 -0
  617. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_generic.py +0 -0
  618. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_history.py +0 -0
  619. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_ips.py +0 -0
  620. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_locale.py +0 -0
  621. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_packagemanager.py +0 -0
  622. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_shadow.py +0 -0
  623. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_trash.py +0 -0
  624. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_users.py +0 -0
  625. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/unix/test_version.py +0 -0
  626. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/__init__.py +0 -0
  627. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/credential/__init__.py +0 -0
  628. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/credential/test_credhist.py +0 -0
  629. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/credential/test_lsa.py +0 -0
  630. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/credential/test_sam.py +0 -0
  631. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/log/test_amcache.py +0 -0
  632. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/log/test_etl.py +0 -0
  633. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/log/test_evt.py +0 -0
  634. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/log/test_evtx.py +0 -0
  635. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/log/test_mssql.py +0 -0
  636. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/log/test_schedlgu.py +0 -0
  637. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/__init__.py +0 -0
  638. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_applications.py +0 -0
  639. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_appxdebugkeys.py +0 -0
  640. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_cam.py +0 -0
  641. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_cit.py +0 -0
  642. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_clsid.py +0 -0
  643. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_muicache.py +0 -0
  644. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_shellbags.py +0 -0
  645. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_trusteddocs.py +0 -0
  646. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_usb.py +0 -0
  647. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/regf/test_userassist.py +0 -0
  648. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test__os.py +0 -0
  649. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_adpolicy.py +0 -0
  650. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_catroot.py +0 -0
  651. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_clfs.py +0 -0
  652. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_datetime.py +0 -0
  653. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_defender.py +0 -0
  654. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_dpapi.py +0 -0
  655. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_env.py +0 -0
  656. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_generic.py +0 -0
  657. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_jumplist.py +0 -0
  658. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_lnk.py +0 -0
  659. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_locale.py +0 -0
  660. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_mru.py +0 -0
  661. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_network.py +0 -0
  662. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_notifications.py +0 -0
  663. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_prefetch.py +0 -0
  664. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_registry.py +0 -0
  665. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_shimcache.py +0 -0
  666. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_sru.py +0 -0
  667. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_syscache.py +0 -0
  668. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_tasks.py +0 -0
  669. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_thumbcache.py +0 -0
  670. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_ual.py +0 -0
  671. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_wer.py +0 -0
  672. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/plugins/os/windows/test_wua_history.py +0 -0
  673. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_exceptions.py +0 -0
  674. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_filesystem.py +0 -0
  675. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_plugin.py +0 -0
  676. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_registration.py +0 -0
  677. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_report.py +0 -0
  678. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_target.py +0 -0
  679. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_tests.py +0 -0
  680. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/test_volume.py +0 -0
  681. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/__init__.py +0 -0
  682. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/conftest.py +0 -0
  683. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_build_pluginlist.py +0 -0
  684. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_diff.py +0 -0
  685. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_dump.py +0 -0
  686. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_fs.py +0 -0
  687. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_fsutils.py +0 -0
  688. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_info.py +0 -0
  689. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_mount.py +0 -0
  690. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_query.py +0 -0
  691. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_reg.py +0 -0
  692. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_shell.py +0 -0
  693. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_utils.py +0 -0
  694. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/tools/test_yara.py +0 -0
  695. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/volumes/__init__.py +0 -0
  696. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/volumes/test_bde.py +0 -0
  697. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tests/volumes/test_md.py +0 -0
  698. {dissect_target-3.20.2.dev49 → dissect_target-3.20.2.dev51}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: dissect.target
3
- Version: 3.20.2.dev49
3
+ Version: 3.20.2.dev51
4
4
  Summary: This module ties all other Dissect modules together, it provides a programming API and command line tools which allow easy access to various data sources inside disk images or file collections (a.k.a. targets)
5
5
  Author-email: Dissect Team <dissect@fox-it.com>
6
6
  License: Affero General Public License v3
@@ -169,7 +169,7 @@ class Container(io.IOBase):
169
169
 
170
170
  Override this if you need to clean-up anything.
171
171
  """
172
- raise NotImplementedError()
172
+ pass
173
173
 
174
174
 
175
175
  def register(module: str, class_name: str, internal: bool = True):
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import errno
3
4
  import os
4
5
  import sys
5
6
  import traceback
@@ -76,22 +77,32 @@ class PluginNotFoundError(PluginError):
76
77
  class FileNotFoundError(FilesystemError, FileNotFoundError):
77
78
  """The requested path could not be found."""
78
79
 
80
+ errno = errno.ENOENT
81
+
79
82
 
80
83
  class IsADirectoryError(FilesystemError, IsADirectoryError):
81
84
  """The entry is a directory."""
82
85
 
86
+ errno = errno.EISDIR
87
+
83
88
 
84
89
  class NotADirectoryError(FilesystemError, NotADirectoryError):
85
90
  """The entry is not a directory."""
86
91
 
92
+ errno = errno.ENOTDIR
93
+
87
94
 
88
95
  class NotASymlinkError(FilesystemError):
89
96
  """The entry is not a symlink."""
90
97
 
98
+ errno = errno.EINVAL
99
+
91
100
 
92
101
  class SymlinkRecursionError(FilesystemError):
93
102
  """A symlink loop is detected for the entry."""
94
103
 
104
+ errno = errno.ELOOP
105
+
95
106
 
96
107
  class RegistryError(Error):
97
108
  """A registry error occurred."""
@@ -20,23 +20,15 @@ from __future__ import annotations
20
20
  import fnmatch
21
21
  import re
22
22
  from pathlib import Path, PurePath, _Accessor, _PosixFlavour
23
- from stat import S_ISBLK, S_ISCHR, S_ISFIFO, S_ISSOCK
24
- from typing import IO, TYPE_CHECKING, Any, Callable, Iterator, Optional
23
+ from typing import IO, TYPE_CHECKING, Any, Callable, Iterator
25
24
 
26
25
  from dissect.target import filesystem
27
26
  from dissect.target.exceptions import FilesystemError, SymlinkRecursionError
28
- from dissect.target.helpers.compat.path_common import (
29
- _DissectPathParents,
30
- io_open,
31
- isjunction,
32
- realpath,
33
- scandir,
34
- )
35
- from dissect.target.helpers.polypath import normalize
27
+ from dissect.target.helpers import polypath
28
+ from dissect.target.helpers.compat import path_common
36
29
 
37
30
  if TYPE_CHECKING:
38
31
  from dissect.target.filesystem import Filesystem, FilesystemEntry
39
- from dissect.target.helpers.compat.path_common import _DissectScandirIterator
40
32
  from dissect.target.helpers.fsutil import stat_result
41
33
 
42
34
 
@@ -82,9 +74,9 @@ class _DissectAccessor(_Accessor):
82
74
  path: TargetPath,
83
75
  mode: str = "rb",
84
76
  buffering: int = 0,
85
- encoding: Optional[str] = None,
86
- errors: Optional[str] = None,
87
- newline: Optional[str] = None,
77
+ encoding: str | None = None,
78
+ errors: str | None = None,
79
+ newline: str | None = None,
88
80
  ) -> IO:
89
81
  """Open file and return a stream.
90
82
 
@@ -93,15 +85,15 @@ class _DissectAccessor(_Accessor):
93
85
  Note: in contrast to regular Python, the mode is binary by default. Text mode
94
86
  has to be explicitly specified. Buffering is also disabled by default.
95
87
  """
96
- return io_open(path, mode, buffering, encoding, errors, newline)
88
+ return path_common.io_open(path, mode, buffering, encoding, errors, newline)
97
89
 
98
90
  @staticmethod
99
- def listdir(path: TargetPath) -> Iterator[str]:
91
+ def listdir(path: TargetPath) -> list[str]:
100
92
  return path.get().listdir()
101
93
 
102
94
  @staticmethod
103
- def scandir(path: TargetPath) -> _DissectScandirIterator:
104
- return scandir(path)
95
+ def scandir(path: TargetPath) -> path_common._DissectScandirIterator:
96
+ return path_common.scandir(path)
105
97
 
106
98
  @staticmethod
107
99
  def chmod(path: TargetPath, mode: int, *, follow_symlinks: bool = True) -> None:
@@ -163,10 +155,10 @@ class _DissectAccessor(_Accessor):
163
155
  def expanduser(path: str) -> str:
164
156
  raise NotImplementedError("TargetPath.expanduser() is unsupported")
165
157
 
166
- realpath = staticmethod(realpath)
158
+ realpath = staticmethod(path_common.realpath)
167
159
 
168
160
  # NOTE: Forward compatibility with CPython >= 3.12
169
- isjunction = staticmethod(isjunction)
161
+ isjunction = staticmethod(path_common.isjunction)
170
162
 
171
163
 
172
164
  _dissect_accessor = _DissectAccessor()
@@ -193,7 +185,7 @@ class PureDissectPath(PurePath):
193
185
  path_args = []
194
186
  for arg in args[1:]:
195
187
  if isinstance(arg, str):
196
- arg = normalize(arg, alt_separator=alt_separator)
188
+ arg = polypath.normalize(arg, alt_separator=alt_separator)
197
189
  path_args.append(arg)
198
190
 
199
191
  self = super()._from_parts(path_args)
@@ -247,8 +239,8 @@ class PureDissectPath(PurePath):
247
239
  return result
248
240
 
249
241
  @property
250
- def parents(self) -> _DissectPathParents:
251
- return _DissectPathParents(self)
242
+ def parents(self) -> path_common._DissectPathParents:
243
+ return path_common._DissectPathParents(self)
252
244
 
253
245
 
254
246
  class TargetPath(Path, PureDissectPath):
@@ -382,9 +374,9 @@ class TargetPath(Path, PureDissectPath):
382
374
  self,
383
375
  mode: str = "rb",
384
376
  buffering: int = 0,
385
- encoding: Optional[str] = None,
386
- errors: Optional[str] = None,
387
- newline: Optional[str] = None,
377
+ encoding: str | None = None,
378
+ errors: str | None = None,
379
+ newline: str | None = None,
388
380
  ) -> IO:
389
381
  """Open file and return a stream.
390
382
 
@@ -402,7 +394,7 @@ class TargetPath(Path, PureDissectPath):
402
394
  raise NotImplementedError("TargetPath.write_bytes() is unsupported")
403
395
 
404
396
  def write_text(
405
- self, data: str, encoding: Optional[str] = None, errors: Optional[str] = None, newline: Optional[str] = None
397
+ self, data: str, encoding: str | None = None, errors: str | None = None, newline: str | None = None
406
398
  ) -> int:
407
399
  """
408
400
  Open the file in text mode, write to it, and close the file.
@@ -417,45 +409,6 @@ class TargetPath(Path, PureDissectPath):
417
409
  obj = self._from_parts((self._fs, path))
418
410
  return obj
419
411
 
420
- def exists(self) -> bool:
421
- """
422
- Whether this path exists.
423
- """
424
- try:
425
- # .exists() must resolve possible symlinks
426
- self.get().stat()
427
- return True
428
- except (FilesystemError, ValueError):
429
- return False
430
-
431
- def is_dir(self) -> bool:
432
- """
433
- Whether this path is a directory.
434
- """
435
- try:
436
- return self.get().is_dir()
437
- except (FilesystemError, ValueError):
438
- return False
439
-
440
- def is_file(self) -> bool:
441
- """
442
- Whether this path is a regular file (also True for symlinks pointing
443
- to regular files).
444
- """
445
- try:
446
- return self.get().is_file()
447
- except (FilesystemError, ValueError):
448
- return False
449
-
450
- def is_symlink(self) -> bool:
451
- """
452
- Whether this path is a symbolic link.
453
- """
454
- try:
455
- return self.get().is_symlink()
456
- except (FilesystemError, ValueError):
457
- return False
458
-
459
412
  # NOTE: Forward compatibility with CPython >= 3.12
460
413
  def is_junction(self) -> bool:
461
414
  """
@@ -463,42 +416,6 @@ class TargetPath(Path, PureDissectPath):
463
416
  """
464
417
  return self._accessor.isjunction(self)
465
418
 
466
- def is_block_device(self) -> bool:
467
- """
468
- Whether this path is a block device.
469
- """
470
- try:
471
- return S_ISBLK(self.stat().st_mode)
472
- except (FilesystemError, ValueError):
473
- return False
474
-
475
- def is_char_device(self) -> bool:
476
- """
477
- Whether this path is a character device.
478
- """
479
- try:
480
- return S_ISCHR(self.stat().st_mode)
481
- except (FilesystemError, ValueError):
482
- return False
483
-
484
- def is_fifo(self) -> bool:
485
- """
486
- Whether this path is a FIFO.
487
- """
488
- try:
489
- return S_ISFIFO(self.stat().st_mode)
490
- except (FilesystemError, ValueError):
491
- return False
492
-
493
- def is_socket(self) -> bool:
494
- """
495
- Whether this path is a socket.
496
- """
497
- try:
498
- return S_ISSOCK(self.stat().st_mode)
499
- except (FilesystemError, ValueError):
500
- return False
501
-
502
419
  def expanduser(self) -> TargetPath:
503
420
  """Return a new path with expanded ~ and ~user constructs
504
421
  (as returned by os.path.expanduser)
@@ -17,34 +17,21 @@ Commit hash we're in sync with: 846a23d
17
17
  Notes:
18
18
  - CPython 3.11 ditched the _Accessor class, so we override the methods that should use it
19
19
  """
20
+
20
21
  from __future__ import annotations
21
22
 
22
23
  import fnmatch
23
24
  import re
24
25
  from pathlib import Path, PurePath, _PosixFlavour
25
- from stat import S_ISBLK, S_ISCHR, S_ISFIFO, S_ISSOCK
26
- from typing import IO, TYPE_CHECKING, Any, Callable, Iterator, Optional
26
+ from typing import IO, TYPE_CHECKING, Any, Callable, Iterator
27
27
 
28
28
  from dissect.target import filesystem
29
- from dissect.target.exceptions import (
30
- FileNotFoundError,
31
- FilesystemError,
32
- NotADirectoryError,
33
- NotASymlinkError,
34
- SymlinkRecursionError,
35
- )
36
- from dissect.target.helpers.compat.path_common import (
37
- _DissectPathParents,
38
- io_open,
39
- isjunction,
40
- realpath,
41
- scandir,
42
- )
43
- from dissect.target.helpers.polypath import normalize
29
+ from dissect.target.exceptions import FilesystemError, SymlinkRecursionError
30
+ from dissect.target.helpers import polypath
31
+ from dissect.target.helpers.compat import path_common
44
32
 
45
33
  if TYPE_CHECKING:
46
34
  from dissect.target.filesystem import Filesystem, FilesystemEntry
47
- from dissect.target.helpers.compat.path_common import _DissectScandirIterator
48
35
  from dissect.target.helpers.fsutil import stat_result
49
36
 
50
37
 
@@ -101,7 +88,7 @@ class PureDissectPath(PurePath):
101
88
  path_args = []
102
89
  for arg in args[1:]:
103
90
  if isinstance(arg, str):
104
- arg = normalize(arg, alt_separator=alt_separator)
91
+ arg = polypath.normalize(arg, alt_separator=alt_separator)
105
92
  path_args.append(arg)
106
93
 
107
94
  self = super()._from_parts(path_args)
@@ -155,8 +142,8 @@ class PureDissectPath(PurePath):
155
142
  return result
156
143
 
157
144
  @property
158
- def parents(self) -> _DissectPathParents:
159
- return _DissectPathParents(self)
145
+ def parents(self) -> path_common._DissectPathParents:
146
+ return path_common._DissectPathParents(self)
160
147
 
161
148
 
162
149
  class TargetPath(Path, PureDissectPath):
@@ -193,7 +180,7 @@ class TargetPath(Path, PureDissectPath):
193
180
  """Iterate over the files in this directory. Does not yield any
194
181
  result for the special paths '.' and '..'.
195
182
  """
196
- for entry in scandir(self):
183
+ for entry in path_common.scandir(self):
197
184
  if entry.name in {".", ".."}:
198
185
  # Yielding a path object for these makes little sense
199
186
  continue
@@ -201,8 +188,8 @@ class TargetPath(Path, PureDissectPath):
201
188
  child_path._entry = entry
202
189
  yield child_path
203
190
 
204
- def _scandir(self) -> _DissectScandirIterator:
205
- return scandir(self)
191
+ def _scandir(self) -> path_common._DissectScandirIterator:
192
+ return path_common.scandir(self)
206
193
 
207
194
  # NOTE: Forward compatibility with CPython >= 3.12
208
195
  def walk(
@@ -267,7 +254,7 @@ class TargetPath(Path, PureDissectPath):
267
254
  normalizing it.
268
255
  """
269
256
 
270
- s = realpath(self, strict=strict)
257
+ s = path_common.realpath(self, strict=strict)
271
258
  p = self._from_parts((self._fs, s))
272
259
 
273
260
  # In non-strict mode, realpath() doesn't raise on symlink loops.
@@ -306,9 +293,9 @@ class TargetPath(Path, PureDissectPath):
306
293
  self,
307
294
  mode: str = "rb",
308
295
  buffering: int = 0,
309
- encoding: Optional[str] = None,
310
- errors: Optional[str] = None,
311
- newline: Optional[str] = None,
296
+ encoding: str | None = None,
297
+ errors: str | None = None,
298
+ newline: str | None = None,
312
299
  ) -> IO:
313
300
  """Open file and return a stream.
314
301
 
@@ -317,7 +304,7 @@ class TargetPath(Path, PureDissectPath):
317
304
  Note: in contrast to regular Python, the mode is binary by default. Text mode
318
305
  has to be explicitly specified. Buffering is also disabled by default.
319
306
  """
320
- return io_open(self, mode, buffering, encoding, errors, newline)
307
+ return path_common.io_open(self, mode, buffering, encoding, errors, newline)
321
308
 
322
309
  def write_bytes(self, data: bytes) -> int:
323
310
  """
@@ -326,7 +313,7 @@ class TargetPath(Path, PureDissectPath):
326
313
  raise NotImplementedError("TargetPath.write_bytes() is unsupported")
327
314
 
328
315
  def write_text(
329
- self, data: str, encoding: Optional[str] = None, errors: Optional[str] = None, newline: Optional[str] = None
316
+ self, data: str, encoding: str | None = None, errors: str | None = None, newline: str | None = None
330
317
  ) -> int:
331
318
  """
332
319
  Open the file in text mode, write to it, and close the file.
@@ -430,36 +417,6 @@ class TargetPath(Path, PureDissectPath):
430
417
  """
431
418
  raise NotImplementedError("TargetPath.link_to() is unsupported")
432
419
 
433
- def exists(self) -> bool:
434
- """
435
- Whether this path exists.
436
- """
437
- try:
438
- # .exists() must resolve possible symlinks
439
- self.get().stat()
440
- return True
441
- except (FileNotFoundError, NotADirectoryError, NotASymlinkError, SymlinkRecursionError, ValueError):
442
- return False
443
-
444
- def is_dir(self) -> bool:
445
- """
446
- Whether this path is a directory.
447
- """
448
- try:
449
- return self.get().is_dir()
450
- except (FilesystemError, ValueError):
451
- return False
452
-
453
- def is_file(self) -> bool:
454
- """
455
- Whether this path is a regular file (also True for symlinks pointing
456
- to regular files).
457
- """
458
- try:
459
- return self.get().is_file()
460
- except (FilesystemError, ValueError):
461
- return False
462
-
463
420
  def is_mount(self) -> bool:
464
421
  """
465
422
  Check if this path is a POSIX mount point
@@ -480,57 +437,12 @@ class TargetPath(Path, PureDissectPath):
480
437
  parent_ino = self.parent.stat().st_ino
481
438
  return ino == parent_ino
482
439
 
483
- def is_symlink(self) -> bool:
484
- """
485
- Whether this path is a symbolic link.
486
- """
487
- try:
488
- return self.get().is_symlink()
489
- except (FilesystemError, ValueError):
490
- return False
491
-
492
440
  # NOTE: Forward compatibility with CPython >= 3.12
493
441
  def is_junction(self) -> bool:
494
442
  """
495
443
  Whether this path is a junction.
496
444
  """
497
- return isjunction(self)
498
-
499
- def is_block_device(self) -> bool:
500
- """
501
- Whether this path is a block device.
502
- """
503
- try:
504
- return S_ISBLK(self.stat().st_mode)
505
- except (FilesystemError, ValueError):
506
- return False
507
-
508
- def is_char_device(self) -> bool:
509
- """
510
- Whether this path is a character device.
511
- """
512
- try:
513
- return S_ISCHR(self.stat().st_mode)
514
- except (FilesystemError, ValueError):
515
- return False
516
-
517
- def is_fifo(self) -> bool:
518
- """
519
- Whether this path is a FIFO.
520
- """
521
- try:
522
- return S_ISFIFO(self.stat().st_mode)
523
- except (FilesystemError, ValueError):
524
- return False
525
-
526
- def is_socket(self) -> bool:
527
- """
528
- Whether this path is a socket.
529
- """
530
- try:
531
- return S_ISSOCK(self.stat().st_mode)
532
- except (FilesystemError, ValueError):
533
- return False
445
+ return path_common.isjunction(self)
534
446
 
535
447
  def expanduser(self) -> TargetPath:
536
448
  """Return a new path with expanded ~ and ~user constructs
@@ -12,7 +12,7 @@ Yes, we know, this is playing with fire and it can break on new CPython releases
12
12
  The implementation is split up in multiple files, one for each CPython version.
13
13
  You're currently looking at the CPython 3.12 implementation.
14
14
 
15
- Commit hash we're in sync with:
15
+ Commit hash we're in sync with: f49221a
16
16
 
17
17
  Notes:
18
18
  - CPython 3.12 changed a lot in preparation of proper subclassing, so our patches differ
@@ -25,22 +25,15 @@ from __future__ import annotations
25
25
  import posixpath
26
26
  import sys
27
27
  from pathlib import Path, PurePath
28
- from stat import S_ISBLK, S_ISCHR, S_ISFIFO, S_ISSOCK
29
- from typing import IO, TYPE_CHECKING, Iterator, Optional
28
+ from typing import IO, TYPE_CHECKING, Iterator
30
29
 
31
30
  from dissect.target import filesystem
32
31
  from dissect.target.exceptions import FilesystemError, SymlinkRecursionError
33
32
  from dissect.target.helpers import polypath
34
- from dissect.target.helpers.compat.path_common import (
35
- io_open,
36
- isjunction,
37
- realpath,
38
- scandir,
39
- )
33
+ from dissect.target.helpers.compat import path_common
40
34
 
41
35
  if TYPE_CHECKING:
42
36
  from dissect.target.filesystem import Filesystem, FilesystemEntry
43
- from dissect.target.helpers.compat.path_common import _DissectScandirIterator
44
37
  from dissect.target.helpers.fsutil import stat_result
45
38
 
46
39
 
@@ -69,7 +62,7 @@ class _DissectFlavour:
69
62
 
70
63
  splitdrive = staticmethod(posixpath.splitdrive)
71
64
 
72
- def splitroot(self, part: str) -> tuple[str, str]:
65
+ def splitroot(self, part: str) -> tuple[str, str, str]:
73
66
  return polypath.splitroot(part, alt_separator=self.altsep)
74
67
 
75
68
  def join(self, *args) -> str:
@@ -93,14 +86,14 @@ class _DissectFlavour:
93
86
  parent_ino = path.parent.stat().st_ino
94
87
  return ino == parent_ino
95
88
 
96
- isjunction = staticmethod(isjunction)
89
+ isjunction = staticmethod(path_common.isjunction)
97
90
 
98
91
  samestat = staticmethod(posixpath.samestat)
99
92
 
100
93
  def isabs(self, path: str) -> bool:
101
94
  return polypath.isabs(path, alt_separator=self.altsep)
102
95
 
103
- realpath = staticmethod(realpath)
96
+ realpath = staticmethod(path_common.realpath)
104
97
 
105
98
 
106
99
  class PureDissectPath(PurePath):
@@ -114,7 +107,7 @@ class PureDissectPath(PurePath):
114
107
  if not isinstance(fs, filesystem.Filesystem):
115
108
  raise TypeError(
116
109
  "invalid PureDissectPath initialization: missing filesystem, "
117
- "got %r (this might be a bug, please report)" % pathsegments
110
+ "got %r (this might be a bug, please report)" % (fs, *pathsegments)
118
111
  )
119
112
 
120
113
  alt_separator = fs.alt_separator
@@ -177,91 +170,13 @@ class TargetPath(Path, PureDissectPath):
177
170
  else:
178
171
  return self.get().lstat()
179
172
 
180
- def exists(self, *, follow_symlinks: bool = True) -> bool:
181
- """
182
- Whether this path exists.
183
-
184
- This method normally follows symlinks; to check whether a symlink exists,
185
- add the argument follow_symlinks=False.
186
- """
187
- try:
188
- # .exists() must resolve possible symlinks
189
- self.stat(follow_symlinks=follow_symlinks)
190
- return True
191
- except (FilesystemError, ValueError):
192
- return False
193
-
194
- def is_dir(self) -> bool:
195
- """
196
- Whether this path is a directory.
197
- """
198
- try:
199
- return self.get().is_dir()
200
- except (FilesystemError, ValueError):
201
- return False
202
-
203
- def is_file(self) -> bool:
204
- """
205
- Whether this path is a regular file (also True for symlinks pointing
206
- to regular files).
207
- """
208
- try:
209
- return self.get().is_file()
210
- except (FilesystemError, ValueError):
211
- return False
212
-
213
- def is_symlink(self) -> bool:
214
- """
215
- Whether this path is a symbolic link.
216
- """
217
- try:
218
- return self.get().is_symlink()
219
- except (FilesystemError, ValueError):
220
- return False
221
-
222
- def is_block_device(self) -> bool:
223
- """
224
- Whether this path is a block device.
225
- """
226
- try:
227
- return S_ISBLK(self.stat().st_mode)
228
- except (FilesystemError, ValueError):
229
- return False
230
-
231
- def is_char_device(self) -> bool:
232
- """
233
- Whether this path is a character device.
234
- """
235
- try:
236
- return S_ISCHR(self.stat().st_mode)
237
- except (FilesystemError, ValueError):
238
- return False
239
-
240
- def is_fifo(self) -> bool:
241
- """
242
- Whether this path is a FIFO.
243
- """
244
- try:
245
- return S_ISFIFO(self.stat().st_mode)
246
- except (FilesystemError, ValueError):
247
- return False
248
-
249
- def is_socket(self) -> bool:
250
- """
251
- Whether this path is a socket.
252
- """
253
- try:
254
- return S_ISSOCK(self.stat().st_mode)
255
- except (FilesystemError, ValueError):
256
- return False
257
-
258
173
  def open(
259
174
  self,
260
175
  mode: str = "rb",
261
176
  buffering: int = 0,
262
- encoding: Optional[str] = None,
263
- errors: Optional[str] = None,
264
- newline: Optional[str] = None,
177
+ encoding: str | None = None,
178
+ errors: str | None = None,
179
+ newline: str | None = None,
265
180
  ) -> IO:
266
181
  """Open file and return a stream.
267
182
 
@@ -270,7 +185,7 @@ class TargetPath(Path, PureDissectPath):
270
185
  Note: in contrast to regular Python, the mode is binary by default. Text mode
271
186
  has to be explicitly specified. Buffering is also disabled by default.
272
187
  """
273
- return io_open(self, mode, buffering, encoding, errors, newline)
188
+ return path_common.io_open(self, mode, buffering, encoding, errors, newline)
274
189
 
275
190
  def write_bytes(self, data: bytes) -> int:
276
191
  """
@@ -279,7 +194,7 @@ class TargetPath(Path, PureDissectPath):
279
194
  raise NotImplementedError("TargetPath.write_bytes() is unsupported")
280
195
 
281
196
  def write_text(
282
- self, data: str, encoding: Optional[str] = None, errors: Optional[str] = None, newline: Optional[str] = None
197
+ self, data: str, encoding: str | None = None, errors: str | None = None, newline: str | None = None
283
198
  ) -> int:
284
199
  """
285
200
  Open the file in text mode, write to it, and close the file.
@@ -290,7 +205,7 @@ class TargetPath(Path, PureDissectPath):
290
205
  """Iterate over the files in this directory. Does not yield any
291
206
  result for the special paths '.' and '..'.
292
207
  """
293
- for entry in scandir(self):
208
+ for entry in path_common.scandir(self):
294
209
  if entry.name in {".", ".."}:
295
210
  # Yielding a path object for these makes little sense
296
211
  continue
@@ -298,8 +213,8 @@ class TargetPath(Path, PureDissectPath):
298
213
  child_path._entry = entry
299
214
  yield child_path
300
215
 
301
- def _scandir(self) -> _DissectScandirIterator:
302
- return scandir(self)
216
+ def _scandir(self) -> path_common._DissectScandirIterator:
217
+ return path_common.scandir(self)
303
218
 
304
219
  @classmethod
305
220
  def cwd(cls) -> TargetPath: