quarchpy 2.2.9.dev4__py2.py3-none-any.whl → 2.2.10__py2.py3-none-any.whl

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 (1892) hide show
  1. quarchpy/__init__.py +1 -1
  2. quarchpy/__pycache__/__init__.cpython-310.pyc +0 -0
  3. quarchpy/__pycache__/_version.cpython-310.pyc +0 -0
  4. quarchpy/__pycache__/connection.cpython-310.pyc +0 -0
  5. quarchpy/_version.py +1 -1
  6. quarchpy/config_files/Cable_Modules/QTL1253-01 - Mini SAS Module Config v3.5 c1.3.qfg +196 -196
  7. quarchpy/config_files/Cable_Modules/QTL1253-01 - Mini SAS Module Config v4.000 c1.3.qfg +198 -198
  8. quarchpy/config_files/Cable_Modules/QTL1253-02 - Mini SAS Module Config v3.5 c1.3.qfg +196 -196
  9. quarchpy/config_files/Cable_Modules/QTL1253-02 - Mini SAS Module Config v4.000 c1.3.qfg +198 -198
  10. quarchpy/config_files/Cable_Modules/QTL1253-xx - Mini SAS Module Config v4.003 c1.6.qfg +197 -197
  11. quarchpy/config_files/Cable_Modules/QTL1271-xx - Ethernet Module Config v3.5 c1.2.qfg +188 -188
  12. quarchpy/config_files/Cable_Modules/QTL1271-xx - Ethernet Module Config v4.000 c1.2.qfg +190 -190
  13. quarchpy/config_files/Cable_Modules/QTL1271-xx - Ethernet Module Config v4.100 c1.3.qfg +189 -189
  14. quarchpy/config_files/Cable_Modules/QTL1292-xx - SFP+ Cable Pull Module Config v4.000 c1.1.qfg +154 -154
  15. quarchpy/config_files/Cable_Modules/QTL1309-04 - USB 3.0 Module Config v4.003 c1.2.qfg +187 -187
  16. quarchpy/config_files/Cable_Modules/QTL1309-xx - USB 3.0 Module Config v3.5 c1.1.qfg +187 -187
  17. quarchpy/config_files/Cable_Modules/QTL1309-xx - USB 3.0 Module Config v4.000 c1.1.qfg +188 -188
  18. quarchpy/config_files/Cable_Modules/QTL1366-xx - QSFP Cable Pull Module Config v4.000 c1.1.qfg +209 -209
  19. quarchpy/config_files/Cable_Modules/QTL1383-xx - eSATAp Module Config v4.000 c1.3.qfg +190 -190
  20. quarchpy/config_files/Cable_Modules/QTL1521-02 - Mini SAS HD Module Config v4.000 c1.1.qfg +210 -210
  21. quarchpy/config_files/Cable_Modules/QTL1521-03 - Mini SAS HD Module Config v4.000 c1.1.qfg +210 -210
  22. quarchpy/config_files/Cable_Modules/QTL1521-05 - Mini SAS HD Module Config v4.005 c1.1.qfg +209 -209
  23. quarchpy/config_files/Cable_Modules/QTL1521-05 - Mini SAS HD Module Config v4.007 c1.2.qfg +209 -209
  24. quarchpy/config_files/Cable_Modules/QTL1521-xx - Mini SAS HD Module Config v4.003 c1.5.qfg +209 -209
  25. quarchpy/config_files/Cable_Modules/QTL1663-xx - Quad QSFP Cable Pull Module Config v4.000 c1.1.qfg +308 -308
  26. quarchpy/config_files/Cable_Modules/QTL1675-05 - Mini SAS HD Module w Triggering Config v4.007 c1.3.qfg +211 -211
  27. quarchpy/config_files/Cable_Modules/QTL1675-xx - Mini SAS HD Module w Triggering Config v4.000 c1.1.qfg +210 -210
  28. quarchpy/config_files/Cable_Modules/QTL1917-xx - Dual SFP+ Cable Pull Module Config v4.000 c1.1.qfg +174 -174
  29. quarchpy/config_files/Cable_Modules/QTL1971-01 - USB TypeC Module Config v4.000 c1.1.qfg +203 -203
  30. quarchpy/config_files/Cable_Modules/QTL1971-02 - USB TypeC Module Config v4.000 c1.1.qfg +203 -203
  31. quarchpy/config_files/Cable_Modules/QTL2022-xx - RJ-45 Cable Module Config v4.104 c1.3.QFG +189 -189
  32. quarchpy/config_files/Cable_Modules/QTL2058-xx - External PCIe Module Config v4.001 c1.1.qfg +209 -209
  33. quarchpy/config_files/Cable_Modules/QTL2138-01 - SFP28 Cable Pull Module Config v4.000 c1.1.qfg +154 -154
  34. quarchpy/config_files/Cable_Modules/QTL2146-01 - Gen4 OCuLink Cable Module Config v4.001 c1.1.qfg +212 -212
  35. quarchpy/config_files/Cable_Modules/QTL2162-01 - 24G mini SAS HD Cable Break Module Config v4.000 c1.qfg +209 -209
  36. quarchpy/config_files/Cable_Modules/QTL2171-01 - QSFP28 Cable Module Config v4.000 c1.qfg +198 -198
  37. quarchpy/config_files/Cable_Modules/QTL2171-02 - QSFP28 Cable Module Config v4.000 c1.qfg +198 -198
  38. quarchpy/config_files/Cable_Modules/QTL2341-01 - Gen4 External PCIe Cable Module v4.000.qfg +209 -209
  39. quarchpy/config_files/Cable_Modules/QTL2602-xx - Multiprotocol Link Breaker.qfg +178 -178
  40. quarchpy/config_files/Cable_Modules/QTL2834-xx - -48V DC Breaker Module v5.000 c1.0.qfg +177 -177
  41. quarchpy/config_files/Card_Modules/QTL1069-xx - SBB 2.0 Module Config v3.5 c1.1.qfg +366 -366
  42. quarchpy/config_files/Card_Modules/QTL1630-01 - PCIe Card Module v4.000 c1.0.qfg +280 -280
  43. quarchpy/config_files/Card_Modules/QTL1630-02 - PCIe Card Module Config v4.004 c1.2.qfg +283 -283
  44. quarchpy/config_files/Card_Modules/QTL1630-02 - PCIe Card Module Config v4.005 c1.2.qfg +283 -283
  45. quarchpy/config_files/Card_Modules/QTL1630-02 - PCIe Card Module Config v4.100 c1.4.qfg +284 -284
  46. quarchpy/config_files/Card_Modules/QTL1630-04 - PCIe Card Module Config v4.001 c1.1.qfg +287 -287
  47. quarchpy/config_files/Card_Modules/QTL1630-04 - PCIe Card Module Config v4.004 c1.2.qfg +287 -287
  48. quarchpy/config_files/Card_Modules/QTL1688-01 - PCIe Card Module w Triggering Config v4.004 c1.2.qfg +284 -284
  49. quarchpy/config_files/Card_Modules/QTL1688-01 - PCIe Card Module w Triggering Config v4.006 c1.3.qfg +285 -285
  50. quarchpy/config_files/Card_Modules/QTL1688-03 - PCIe Card Module w Triggering Config v4.001 c1.1.qfg +286 -286
  51. quarchpy/config_files/Card_Modules/QTL1688-03 - PCIe Card Module w Triggering Config v4.004 c1.2.qfg +288 -288
  52. quarchpy/config_files/Card_Modules/QTL1688-04 - PCIe Card Module w Triggering Config v4.005 c1.5.qfg +288 -288
  53. quarchpy/config_files/Card_Modules/QTL1688-05 - PCIe Card Module w Triggering Config v4.005 c1.qfg +288 -288
  54. quarchpy/config_files/Card_Modules/QTL1848-01 - PCIe Lite Card Module Config v4.000.qfg +122 -122
  55. quarchpy/config_files/Card_Modules/QTL1848-02 - PCIe Lite Card Module Config v4.000.qfg +134 -134
  56. quarchpy/config_files/Card_Modules/QTL1919-01 - PCIe x8 Card Module Config v4.001 c1.4.qfg +247 -247
  57. quarchpy/config_files/Card_Modules/QTL1920-01 - PCIe x8 Card Module w Triggering Config v4.000 c1.3.qfg +247 -247
  58. quarchpy/config_files/Card_Modules/QTL2019-xx - M.2 Horizontal Card Module Config v4.002 c1.1.qfg +219 -219
  59. quarchpy/config_files/Card_Modules/QTL2034-xx - M.2 M-Key Vertical Module Config v4.001 c1.1.qfg +221 -221
  60. quarchpy/config_files/Card_Modules/QTL2067-xx - PCIe SFF Module Config v4.000 c1.1.qfg +248 -248
  61. quarchpy/config_files/Card_Modules/QTL2067-xx - Sanblaze 2 Drive Riser Card Config v4.006 c1.4.qfg +256 -256
  62. quarchpy/config_files/Card_Modules/QTL2067-xx - Sanblaze 2 Drive Riser Card Config v4.007 c1.4.qfg +256 -256
  63. quarchpy/config_files/Card_Modules/QTL2073-01 - GEN3 PCIe Lite Card Module Config v4.001.qfg +134 -134
  64. quarchpy/config_files/Card_Modules/QTL2073-01 - PCIe Lite Card Module Config v4.000.qfg +134 -134
  65. quarchpy/config_files/Card_Modules/QTL2074-01 - GEN3 PCIe HS Card Module v4.005 c1.4.qfg +287 -287
  66. quarchpy/config_files/Card_Modules/QTL2074-01 - PCIe Card Module Config CurrentLimit v4.004 c1.2.qfg +287 -287
  67. quarchpy/config_files/Card_Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.1.qfg +287 -287
  68. quarchpy/config_files/Card_Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.3.qfg +277 -277
  69. quarchpy/config_files/Card_Modules/QTL2087-xx - PCIe GEN4 Card Module w Triggering Config v5.000 c1.4.qfg +277 -277
  70. quarchpy/config_files/Card_Modules/QTL2094-01 - Sanblaze Dualport Riser Card Config v4.001 c1.1.qfg +223 -223
  71. quarchpy/config_files/Card_Modules/QTL2128-xx - PCIe GEN4 Card Module w Triggering Config v4.000 c1.1.qfg +287 -287
  72. quarchpy/config_files/Card_Modules/QTL2128-xx - PCIe GEN4 Card Module w Triggering Config v4.001 c1.4.qfg +277 -277
  73. quarchpy/config_files/Card_Modules/QTL2135-xx - PCIe GEN4 Card Module w Triggering Config - Inrush Limit v4.001 c1.4.qfg +277 -277
  74. quarchpy/config_files/Card_Modules/QTL2161-01 - EDSFF x8 Module Config v4.000 c1.1.qfg +210 -210
  75. quarchpy/config_files/Card_Modules/QTL2171-xx - EDSFF x8 Module w Triggering Config 4.001 c1.1.qfg +213 -213
  76. quarchpy/config_files/Card_Modules/QTL2203-01 - Sanblaze Dualport Rack Riser Card Config v4.000 c1.1.qfg +218 -218
  77. quarchpy/config_files/Card_Modules/QTL2203-01 - Sanblaze Dualport Rack Riser Card Config v4.005 c1.5.qfg +218 -218
  78. quarchpy/config_files/Card_Modules/QTL2272-01 - GEN4 EDSFF x8 Module Config v4.000 c1.1.qfg +211 -211
  79. quarchpy/config_files/Card_Modules/QTL2282-01 - Sanblaze Singleport Rack Riser Card Config v4.000 c1.1.qfg +212 -212
  80. quarchpy/config_files/Card_Modules/QTL2282-01 - Sanblaze Singleport Rack Riser Card Config v4.002 c1.2.qfg +212 -212
  81. quarchpy/config_files/Card_Modules/QTL2318-01 - SANBlaze U.2 Rack Riser Card Config v4.000 c1.1.qfg +218 -218
  82. quarchpy/config_files/Card_Modules/QTL2322-03 - GEN4 M.2 M-Key Vertical Breaker Module Config v5.001 c1.3.qfg +220 -220
  83. quarchpy/config_files/Card_Modules/QTL2322-xx - GEN4 M.2 M-Key Vertical Breaker Module Config v5.000 c1.1.qfg +208 -208
  84. quarchpy/config_files/Card_Modules/QTL2334-xx - Gen4 EDSFF x4 Card Module Config v4.000 c1.1.qfg +187 -187
  85. quarchpy/config_files/Card_Modules/QTL2351-xx - GEN4 EDSFF x4 Card Module +Triggering Config v4.000 c1.1.qfg +189 -189
  86. quarchpy/config_files/Card_Modules/QTL2351-xx - GEN4 EDSFF x4 Card Module +Triggering Config v4.001 c1.2.qfg +190 -190
  87. quarchpy/config_files/Card_Modules/QTL2357-xx - PCIe GEN5 Card Module Config v5.000 c1.1.qfg +282 -282
  88. quarchpy/config_files/Card_Modules/QTL2358-xx - PCIe GEN5 Card Module w Triggering Config v5.000 c1.1.qfg +283 -283
  89. quarchpy/config_files/Card_Modules/QTL2378-xx - SANBlaze U.3 Rack Riser Card Config v4.000 c1.1.qfg +215 -215
  90. quarchpy/config_files/Card_Modules/QTL2378-xx - SANBlaze U.3 Rack Riser Card Config v4.001 c1.2.qfg +217 -217
  91. quarchpy/config_files/Card_Modules/QTL2395-01 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.000 c1.1.qfg +208 -208
  92. quarchpy/config_files/Card_Modules/QTL2395-02 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.001 c1.3.qfg +220 -220
  93. quarchpy/config_files/Card_Modules/QTL2395-03 - GEN4 M.2 M-Key Vertical Breaker Module w Triggering Config v5.001 c1.3.qfg +220 -220
  94. quarchpy/config_files/Card_Modules/QTL2396-xx - PCIe GEN5 Card Module w inrush Config v5.000 c1.1.qfg +282 -282
  95. quarchpy/config_files/Card_Modules/QTL2403-xx - Gen4 PCIe Lite Module Config v4.000.qfg +135 -135
  96. quarchpy/config_files/Card_Modules/QTL2515-xx - PCIe GEN4 Card Module w Triggering - Inrush Limit Config v4.001 c1.3.qfg +277 -277
  97. quarchpy/config_files/Card_Modules/QTL2652-xx - Gen5 PCIe Lite Module Config v4.000.qfg +130 -130
  98. quarchpy/config_files/Card_Modules/QTL2652-xx - Gen5 PCIe Lite Module Config v4.003.qfg +137 -137
  99. quarchpy/config_files/Card_Modules/QTL2658-xx - Gen5 PCIe Lite Module w Inrush Config v4.000.qfg +130 -130
  100. quarchpy/config_files/Card_Modules/QTL2661-xx - GEN5 PCIe U.3 Breaker Config w Triggering v5.000 c1.1.qfg +229 -229
  101. quarchpy/config_files/Card_Modules/QTL2662-xx - GEN5 PCIe U.3 Breaker Config v5.000 c1.1.qfg +228 -228
  102. quarchpy/config_files/Card_Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.000.qfg +230 -230
  103. quarchpy/config_files/Card_Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker Config v5.001 c1.2.qfg +233 -233
  104. quarchpy/config_files/Card_Modules/QTL2686-xx - Gen5 EDSFF E3 x4 Breaker v5.000 c1.1.qfg +230 -230
  105. quarchpy/config_files/Card_Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker +Triggering Config v5.000.qfg +230 -230
  106. quarchpy/config_files/Card_Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker w Triggering Config v5.001 c1.2.qfg +233 -233
  107. quarchpy/config_files/Card_Modules/QTL2692-xx - Gen5 EDSFF E3 x4 Breaker w Triggering v5.000 c1.1.qfg +230 -230
  108. quarchpy/config_files/Card_Modules/QTL2766-xx - GEN4 EDSFF E1 x8 Breaker Config v5.000.qfg +253 -253
  109. quarchpy/config_files/Card_Modules/QTL2767-xx - GEN4 EDSFF E3 x8 Breaker Config v5.000.qfg +253 -253
  110. quarchpy/config_files/Card_Modules/QTL2768-xx - GEN4 EDSFF E3 2T x8 Breaker Config v5.000.qfg +253 -253
  111. quarchpy/config_files/Card_Modules/QTL2776-xx - GEN4 EDSFF E1 x8 Breaker +Triggering Config v5.000.qfg +253 -253
  112. quarchpy/config_files/Card_Modules/QTL2777-xx - GEN4 EDSFF E3 x8 Breaker +Triggering Config v5.000.qfg +253 -253
  113. quarchpy/config_files/Card_Modules/QTL2778-xx - GEN4 EDSFF E3 2T x8 Breaker +Triggering Config v5.000.qfg +253 -253
  114. quarchpy/config_files/Card_Modules/QTL2798-xx - PCIe GEN5 Card Module w Triggering w Inrush Limit Config v5.000 c1.1.qfg +283 -283
  115. quarchpy/config_files/Card_Modules/QTL2804-xx - GEN5 MCIO x4 to U.2 Breaker Config v5.000 c1.1.qfg +234 -234
  116. quarchpy/config_files/Card_Modules/QTL2805-xx - GEN5 MCIO x4 to U.2 Breaker + Triggering Config v5.000 c1.1.qfg +234 -234
  117. quarchpy/config_files/Card_Modules/QTL2814-xx - GEN5 AIC to U.2 Breaker + Triggering Config v5.000 c1.1 .qfg +233 -233
  118. quarchpy/config_files/Card_Modules/QTL2892-xx - GEN5 EDSFF E1 x4 Breaker.qfg +233 -233
  119. quarchpy/config_files/Card_Modules/QTL2925-xx - GEN5 EDSFF E1 x4 Breaker +Triggering.qfg +233 -233
  120. quarchpy/config_files/Drive_Modules/QTL1177-xx - HS Module Config v3.5 c1.5.qfg +198 -198
  121. quarchpy/config_files/Drive_Modules/QTL1177-xx - HS Module Config v4.000 c1.5.qfg +200 -200
  122. quarchpy/config_files/Drive_Modules/QTL1177-xx - HS Module Config v4.006 c1.8.qfg +199 -199
  123. quarchpy/config_files/Drive_Modules/QTL1215-xx - Lite Module Config v3.50.qfg +118 -118
  124. quarchpy/config_files/Drive_Modules/QTL1215-xx - Lite Module Config v4.000.qfg +118 -118
  125. quarchpy/config_files/Drive_Modules/QTL1301-xx - HS Lite Module Config v3.50.qfg +129 -129
  126. quarchpy/config_files/Drive_Modules/QTL1301-xx - HS Lite Module Config v4.000.qfg +129 -129
  127. quarchpy/config_files/Drive_Modules/QTL1429-01 - EMC HS Lite Module Config v4.000.qfg +129 -129
  128. quarchpy/config_files/Drive_Modules/QTL1429-02 - EMC HS Lite Module Config v4.002.qfg +120 -120
  129. quarchpy/config_files/Drive_Modules/QTL1623-03 - 12G HS Lite Module Config v4.001.qfg +128 -128
  130. quarchpy/config_files/Drive_Modules/QTL1623-04 - 12G HS Lite Module Config v4.001.qfg +128 -128
  131. quarchpy/config_files/Drive_Modules/QTL1680-xx - SCA2 Lite Module Config v4.001.qfg +135 -135
  132. quarchpy/config_files/Drive_Modules/QTL1689-01 - 12G HS Module Config v4.001 c1.1.qfg +199 -199
  133. quarchpy/config_files/Drive_Modules/QTL1689-04 - 12G HS Module Config v4.002 c1.1.qfg +196 -196
  134. quarchpy/config_files/Drive_Modules/QTL1689-05 - 12G HS Module Config v4.002 c1.1.qfg +196 -196
  135. quarchpy/config_files/Drive_Modules/QTL1743-02 - PCIe SFF Module Config v4.003 c1.3.qfg +222 -222
  136. quarchpy/config_files/Drive_Modules/QTL1743-02 - PCIe SFF Module Config v4.006 c1.4.qfg +213 -213
  137. quarchpy/config_files/Drive_Modules/QTL1743-xx - PCIe SFF Module Config v4.000 c1.1.qfg +221 -221
  138. quarchpy/config_files/Drive_Modules/QTL1753-xx - 12G Lite Module Config v4.000.qfg +116 -116
  139. quarchpy/config_files/Drive_Modules/QTL1921-01 - EMC 12G HS Lite Module Config v4.000.qfg +120 -120
  140. quarchpy/config_files/Drive_Modules/QTL2207-01 - GEN 4 PCIe U.2 Drive Module.qfg +217 -217
  141. quarchpy/config_files/Drive_Modules/QTL2207-02 - GEN 4 PCIe U.2 Drive Module v5.000.qfg +220 -220
  142. quarchpy/config_files/Drive_Modules/QTL2207-03 - GEN 4 PCIe SFF HS Drive Module Triggering v5.001.qfg +221 -221
  143. quarchpy/config_files/Drive_Modules/QTL2207-xx - GEN 4 PCIe U.2 Drive Module v4.001.qfg +219 -219
  144. quarchpy/config_files/Drive_Modules/QTL2207-xx - GEN 4 PCIe U.2 Drive Module.qfg +219 -219
  145. quarchpy/config_files/Drive_Modules/QTL2245-01 - GEN 4 PCIe U.3 HS Drive Module v4.000.qfg +223 -223
  146. quarchpy/config_files/Drive_Modules/QTL2245-xx - GEN 4 PCIe U.3 HS Drive Module.qfg +229 -229
  147. quarchpy/config_files/Drive_Modules/QTL2266-01 - GEN 4 PCIe SFF HS Drive Module Triggering.qfg +219 -219
  148. quarchpy/config_files/Drive_Modules/QTL2266-02 - GEN 4 PCIe SFF HS Drive Module Triggering v4.002.qfg +220 -220
  149. quarchpy/config_files/Drive_Modules/QTL2266-03 - GEN 4 PCIe SFF HS Drive Module Triggering v5.001.qfg +221 -221
  150. quarchpy/config_files/Drive_Modules/QTL2266-XX - GEN 4 PCIe SFF HS Drive Module Triggering.qfg +219 -219
  151. quarchpy/config_files/Drive_Modules/QTL2270-01 - GEN 4 PCIe U.3 HS Drive Module Triggering v4.000.qfg +225 -225
  152. quarchpy/config_files/Drive_Modules/QTL2270-xx - GEN 4 PCIe U.3 HS Drive Module Triggering.qfg +230 -230
  153. quarchpy/config_files/Drive_Modules/QTL2542-02 - 24G SAS Drive Breaker Module v5.001.qfg +194 -194
  154. quarchpy/config_files/Drive_Modules/QTL2542-xx - 24G SAS Drive Breaker v5.000 c1.1.qfg +194 -194
  155. quarchpy/config_files/Drive_Modules/QTL2543-xx - 24G SAS Drive Breaker +Triggering v5.000 c1.1.qfg +195 -195
  156. quarchpy/config_files/Drive_Modules/QTL2602-xx - Multiprotocol Link Breaker.qfg +178 -178
  157. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.000.qfg +227 -227
  158. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.001.qfg +227 -227
  159. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.003.qfg +227 -227
  160. quarchpy/config_files/Drive_Modules/QTL2645-xx - Gen5 PCIe U.2 Drive Module v5.007.qfg +229 -229
  161. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.000.qfg +228 -228
  162. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.001.qfg +228 -228
  163. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module + Triggering v5.003.qfg +228 -228
  164. quarchpy/config_files/Drive_Modules/QTL2651-xx - Gen5 PCIe U.2 Drive Module v5.007.qfg +230 -230
  165. quarchpy/config_files/Drive_Modules/QTL2661-xx - Gen5 U.3 Drive Module + Triggering v5.000.qfg +229 -229
  166. quarchpy/config_files/Drive_Modules/QTL2662-xx - Gen5 PCIe U.3 Drive Module v5.000.qfg +228 -228
  167. quarchpy/config_files/Drive_Modules/QTL2757-xx - Gen5 SFF Lite Breaker Module Config v4.000.qfg +140 -140
  168. quarchpy/config_files/Drive_Modules/QTL2804-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.003.qfg +253 -253
  169. quarchpy/config_files/Drive_Modules/QTL2804-xx - Gen5 MCIO to U.2 Breaker v5.001.qfg +234 -234
  170. quarchpy/config_files/Drive_Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.001.qfg +234 -234
  171. quarchpy/config_files/Drive_Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.002.qfg +253 -253
  172. quarchpy/config_files/Drive_Modules/QTL2805-xx - Gen5 MCIO to U.2 Breaker +Triggering v5.003.qfg +253 -253
  173. quarchpy/config_files/Drive_Modules/QTL2813-xx - Gen5 AIC to U.2 Breaker v5.001 c1.2.qfg +230 -230
  174. quarchpy/config_files/Drive_Modules/QTL2813-xx - Gen5 AIC to U.2 Breaker with Triggering v5.002 c1.3.qfg +253 -253
  175. quarchpy/config_files/Drive_Modules/QTL2814-xx - Gen5 AIC to U.2 Breaker with Triggering v5.001 c1.2.qfg +230 -230
  176. quarchpy/config_files/Drive_Modules/QTL2814-xx - Gen5 AIC to U.2 Breaker with Triggering v5.002 c1.3.qfg +253 -253
  177. quarchpy/config_files/Drive_Modules/QTL2892-xx - Gen5 EDSFF E1 x4 Breaker v5.001.qfg +233 -233
  178. quarchpy/config_files/Drive_Modules/Standard Drive Module Config v3.5 c1.1.qfg +171 -171
  179. quarchpy/config_files/Power_Margining/HD/QTL1944-xx - HD Power Module v5.000.qfg +123 -123
  180. quarchpy/config_files/Power_Margining/HD/QTL1944-xx - HD Power Module v5.003.qfg +124 -124
  181. quarchpy/config_files/Power_Margining/HD/QTL1995-xx - x6 HD Power Module v5.002.qfg +122 -122
  182. quarchpy/config_files/Power_Margining/HD/QTL1995-xx - x6 HD Power Module v5.003.qfg +123 -123
  183. quarchpy/config_files/Power_Margining/HD/QTL1999-xx - Single HD Power Module v5.002.qfg +122 -122
  184. quarchpy/config_files/Power_Margining/HD/QTL1999-xx - Single HD Power Module v5.003.qfg +123 -123
  185. quarchpy/config_files/Power_Margining/HD/QTL1999-xx - Single HD Power Module v6.000.qfg +124 -124
  186. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Power Margining Module v4.101.qfg +78 -78
  187. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Power Margining Module v4.200.qfg +80 -80
  188. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Power Margining Module v4.201.qfg +82 -82
  189. quarchpy/config_files/Power_Margining/PPM/QTL1455-02 - Test Power Margining Module v4.004.qfg +73 -73
  190. quarchpy/config_files/Power_Margining/PPM/QTL1658-01 - Power Margining Module w. Triggering v4.101.qfg +78 -78
  191. quarchpy/config_files/Power_Margining/PPM/QTL1658-01 - Power Margining Module w. Triggering v4.200.qfg +80 -80
  192. quarchpy/config_files/Power_Margining/PPM/QTL1658-01 - Power Margining Module w. Triggering v4.201.qfg +82 -82
  193. quarchpy/config_files/Power_Margining/PPM/QTL1727-01 - 3v3 Power Margining Module w. Triggering v4.105.qfg +78 -78
  194. quarchpy/config_files/Power_Margining/PPM/QTL1727-01 - 3v3 Power Margining Module w. Triggering v4.200.qfg +80 -80
  195. quarchpy/config_files/Power_Margining/PPM/QTL1727-01 - 3v3 Power Margining Module w. Triggering v4.201.qfg +82 -82
  196. quarchpy/config_files/Power_Margining/PPM/QTL1730-01 - 3v3 Power Margining Module v4.105.qfg +78 -78
  197. quarchpy/config_files/Power_Margining/PPM/QTL1730-01 - 3v3 Power Margining Module v4.200.qfg +80 -80
  198. quarchpy/config_files/Power_Margining/PPM/QTL1730-01 - 3v3 Power Margining Module v4.201.qfg +82 -82
  199. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.000.qfg +80 -80
  200. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.200.qfg +81 -81
  201. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.202.qfg +87 -87
  202. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.210.qfg +88 -88
  203. quarchpy/config_files/Power_Margining/XLC/QTL1824-01 - Power Margining Module V2 - Triggering v4.211.qfg +121 -121
  204. quarchpy/config_files/Power_Margining/XLC/QTL1824-03 - Power Margining Module V2 - Triggering v4.213.qfg +121 -121
  205. quarchpy/config_files/Power_Margining/XLC/QTL1847-01 - Power Margining Module V2 v4.213.qfg +121 -121
  206. quarchpy/config_files/Switch_Modules/QTL1390-xx - 4-8 SATA MUX Module Config v4.002.qfg +186 -186
  207. quarchpy/config_files/Switch_Modules/QTL1443-xx - 1-8 USB3 MUX Module Config v4.002.qfg +147 -147
  208. quarchpy/config_files/Switch_Modules/QTL1443-xx - 1-8 USB3 MUX Module Config v4.003.qfg +147 -147
  209. quarchpy/config_files/Switch_Modules/QTL1443-xx - 1-8 USB3 MUX Module Config v4.100.qfg +147 -147
  210. quarchpy/config_files/Switch_Modules/QTL1449-xx - 1-8 PCIe MUX Module Config v4.000.qfg +145 -145
  211. quarchpy/config_files/Switch_Modules/QTL1490-xx - SATA Keyed HS Module Config v4.003 c1.6.qfg +194 -194
  212. quarchpy/config_files/Switch_Modules/QTL1490-xx - SATA Keyed HS Module Config v4.006 c1.8.qfg +193 -193
  213. quarchpy/config_files/Switch_Modules/QTL1530-xx - 1-8 DP MUX Module Config v4.000.qfg +145 -145
  214. quarchpy/config_files/Switch_Modules/QTL1564-xx - 12 Port Mini SAS HD MUX Module Config v4.000.qfg +184 -184
  215. quarchpy/config_files/Switch_Modules/QTL1584-xx - 1-4 ExpressCard MUX Module Config v4.000.qfg +81 -81
  216. quarchpy/config_files/__pycache__/__init__.cpython-310.pyc +0 -0
  217. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-310.pyc +0 -0
  218. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/Material-Icons-license.txt +51 -51
  219. quarchpy/connection_specific/QPS/win-amd64/3rdPartyLicenses/controlsfx-license.txt +28 -28
  220. quarchpy/connection_specific/QPS/win-amd64/app.jar +0 -0
  221. quarchpy/connection_specific/QPS/win-amd64/app.properties +6 -6
  222. quarchpy/connection_specific/QPS/win-amd64/qis/help.txt +5 -1
  223. quarchpy/connection_specific/QPS/win-amd64/qis/qis.jar +0 -0
  224. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/CInterface-2.5.jar +0 -0
  225. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.1.jar +0 -0
  226. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.2.2.jar +0 -0
  227. quarchpy/connection_specific/QPS/win-amd64/qps-command-reference.html +12 -4
  228. quarchpy/connection_specific/QPS/win-amd64/qps.jar +0 -0
  229. quarchpy/connection_specific/QPS/win-amd64/qps_lib/JFXUtilities-1.0.jar +0 -0
  230. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.1.jar +0 -0
  231. quarchpy/connection_specific/QPS/win-amd64/qps_lib/commons-io-2.19.0.jar +0 -0
  232. quarchpy/connection_specific/QPS/win-amd64/qps_lib/controlsfx-11.2.2.jar +0 -0
  233. quarchpy/connection_specific/QPS/win-amd64/qps_lib/gson-2.13.1.jar +0 -0
  234. quarchpy/connection_specific/QPS/win-amd64/qps_lib/guava-33.4.8-jre.jar +0 -0
  235. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-base-24.0.1-linux-aarch64.jar +0 -0
  236. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-controls-24.0.1-linux-aarch64.jar +0 -0
  237. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-fxml-24.0.1-linux-aarch64.jar +0 -0
  238. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-graphics-24.0.1-linux-aarch64.jar +0 -0
  239. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-swing-24.0.1-linux-aarch64.jar +0 -0
  240. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-base-24.0.1-linux.jar +0 -0
  241. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-controls-24.0.1-linux.jar +0 -0
  242. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-fxml-24.0.1-linux.jar +0 -0
  243. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-graphics-24.0.1-linux.jar +0 -0
  244. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-swing-24.0.1-linux.jar +0 -0
  245. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-base-24.0.1-mac-aarch64.jar +0 -0
  246. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-controls-24.0.1-mac-aarch64.jar +0 -0
  247. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-fxml-24.0.1-mac-aarch64.jar +0 -0
  248. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-graphics-24.0.1-mac-aarch64.jar +0 -0
  249. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-swing-24.0.1-mac-aarch64.jar +0 -0
  250. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-base-24.0.1-mac.jar +0 -0
  251. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-controls-24.0.1-mac.jar +0 -0
  252. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-fxml-24.0.1-mac.jar +0 -0
  253. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-graphics-24.0.1-mac.jar +0 -0
  254. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-swing-24.0.1-mac.jar +0 -0
  255. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-base-24.0.1-win.jar +0 -0
  256. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-controls-24.0.1-win.jar +0 -0
  257. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-fxml-24.0.1-win.jar +0 -0
  258. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-graphics-24.0.1-win.jar +0 -0
  259. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-swing-24.0.1-win.jar +0 -0
  260. quarchpy/connection_specific/QPS/win-amd64/scriptCommands.txt +29 -2
  261. quarchpy/connection_specific/QPS/win-amd64/whats-new.txt +21 -18
  262. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-310.pyc +0 -0
  263. quarchpy/connection_specific/__pycache__/__init__.cpython-310.pyc +0 -0
  264. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-310.pyc +0 -0
  265. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-310.pyc +0 -0
  266. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-310.pyc +0 -0
  267. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-310.pyc +0 -0
  268. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-310.pyc +0 -0
  269. quarchpy/connection_specific/__pycache__/connection_USB.cpython-310.pyc +0 -0
  270. quarchpy/connection_specific/__pycache__/mDNS.cpython-310.pyc +0 -0
  271. quarchpy/connection_specific/connection_QIS.py +228 -176
  272. quarchpy/connection_specific/connection_QPS.py +4 -4
  273. quarchpy/connection_specific/jdk_jres/__pycache__/__init__.cpython-310.pyc +0 -0
  274. quarchpy/connection_specific/jdk_jres/__pycache__/fix_permissions.cpython-310.pyc +0 -0
  275. quarchpy/connection_specific/jdk_jres/fix_permissions.py +70 -0
  276. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/bin/java +0 -0
  277. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/bin/jfr +0 -0
  278. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/bin/jrunscript +0 -0
  279. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/bin/jwebserver +0 -0
  280. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/bin/keytool +0 -0
  281. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/bin/rmiregistry +0 -0
  282. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/conf/jaxp-strict.properties.template +123 -0
  283. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/conf/jaxp.properties +200 -0
  284. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/conf/logging.properties +63 -0
  285. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/conf/management/management.properties +326 -0
  286. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/conf/net.properties +162 -0
  287. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/conf/security/java.security +1517 -0
  288. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.base/asm.md +36 -0
  289. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.base/cldr.md +100 -0
  290. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.base/icu.md +93 -0
  291. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.base/public_suffix.md +399 -0
  292. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.base/unicode.md +269 -0
  293. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.desktop/freetype.md +649 -0
  294. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.desktop/giflib.md +46 -0
  295. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.smartcardio/pcsclite.md +57 -0
  296. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/schema10part1.md +51 -0
  297. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/schema10part2.md +50 -0
  298. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xalan.md +255 -0
  299. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xhtml10.md +57 -0
  300. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xhtml10schema.md +150 -0
  301. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xhtml11.md +68 -0
  302. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xhtml11schema.md +60 -0
  303. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xmlspec.md +63 -0
  304. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/java.xml/xmlxsd.md +43 -0
  305. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +76 -0
  306. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/jdk.incubator.vector/sleef.md +439 -0
  307. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/legal/jdk.localedata/cldr.md +100 -0
  308. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/classlist +1587 -0
  309. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/jexec +0 -0
  310. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/jfr/default.jfc +1152 -0
  311. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/jfr/profile.jfc +1151 -0
  312. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/jrt-fs.jar +0 -0
  313. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/jspawnhelper +0 -0
  314. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libawt.so +0 -0
  315. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libawt_headless.so +0 -0
  316. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libawt_xawt.so +0 -0
  317. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libdt_socket.so +0 -0
  318. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libextnet.so +0 -0
  319. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libfontmanager.so +0 -0
  320. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libfreetype.so +0 -0
  321. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libinstrument.so +0 -0
  322. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libj2gss.so +0 -0
  323. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libj2pcsc.so +0 -0
  324. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libj2pkcs11.so +0 -0
  325. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjaas.so +0 -0
  326. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjava.so +0 -0
  327. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjavajpeg.so +0 -0
  328. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjawt.so +0 -0
  329. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjdwp.so +0 -0
  330. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjimage.so +0 -0
  331. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjli.so +0 -0
  332. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjsig.so +0 -0
  333. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjsound.so +0 -0
  334. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libjsvml.so +0 -0
  335. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/liblcms.so +0 -0
  336. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libmanagement.so +0 -0
  337. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libmanagement_agent.so +0 -0
  338. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libmanagement_ext.so +0 -0
  339. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libmlib_image.so +0 -0
  340. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libnet.so +0 -0
  341. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libnio.so +0 -0
  342. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libprefs.so +0 -0
  343. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/librmi.so +0 -0
  344. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libsctp.so +0 -0
  345. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libsimdsort.so +0 -0
  346. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libsplashscreen.so +0 -0
  347. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libsyslookup.so +0 -0
  348. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libverify.so +0 -0
  349. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/libzip.so +0 -0
  350. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/modules +0 -0
  351. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/psfontj2d.properties +323 -0
  352. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/security/public_suffix_list.dat +0 -0
  353. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/server/libjsig.so +0 -0
  354. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/server/libjvm.so +0 -0
  355. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/lib/tzdb.dat +0 -0
  356. quarchpy/connection_specific/jdk_jres/lin_amd64_jdk_jre/release +2 -0
  357. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/bin/java +0 -0
  358. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/bin/jfr +0 -0
  359. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/bin/jrunscript +0 -0
  360. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/bin/jwebserver +0 -0
  361. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/bin/keytool +0 -0
  362. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/bin/rmiregistry +0 -0
  363. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/conf/jaxp-strict.properties.template +123 -0
  364. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/conf/jaxp.properties +200 -0
  365. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/conf/logging.properties +63 -0
  366. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/conf/management/management.properties +326 -0
  367. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/conf/net.properties +162 -0
  368. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/conf/security/java.security +1518 -0
  369. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.base/asm.md +36 -0
  370. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.base/cldr.md +100 -0
  371. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.base/icu.md +93 -0
  372. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.base/public_suffix.md +399 -0
  373. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.base/unicode.md +269 -0
  374. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.desktop/freetype.md +649 -0
  375. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.desktop/giflib.md +46 -0
  376. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.smartcardio/pcsclite.md +57 -0
  377. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/schema10part1.md +51 -0
  378. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/schema10part2.md +50 -0
  379. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xalan.md +255 -0
  380. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xhtml10.md +57 -0
  381. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xhtml10schema.md +150 -0
  382. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xhtml11.md +68 -0
  383. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xhtml11schema.md +60 -0
  384. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xmlspec.md +63 -0
  385. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/java.xml/xmlxsd.md +43 -0
  386. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +76 -0
  387. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/legal/jdk.localedata/cldr.md +100 -0
  388. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/classlist +1589 -0
  389. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/jfr/default.jfc +1152 -0
  390. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/jfr/profile.jfc +1151 -0
  391. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/jrt-fs.jar +0 -0
  392. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/jspawnhelper +0 -0
  393. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libawt.dylib +0 -0
  394. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libawt_lwawt.dylib +0 -0
  395. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libdt_socket.dylib +0 -0
  396. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libextnet.dylib +0 -0
  397. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libfontmanager.dylib +0 -0
  398. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libfreetype.dylib +0 -0
  399. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libinstrument.dylib +0 -0
  400. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libj2gss.dylib +0 -0
  401. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libj2pcsc.dylib +0 -0
  402. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libj2pkcs11.dylib +0 -0
  403. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjaas.dylib +0 -0
  404. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjava.dylib +0 -0
  405. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjavajpeg.dylib +0 -0
  406. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjawt.dylib +0 -0
  407. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjdwp.dylib +0 -0
  408. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjimage.dylib +0 -0
  409. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjli.dylib +0 -0
  410. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjsig.dylib +0 -0
  411. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libjsound.dylib +0 -0
  412. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/liblcms.dylib +0 -0
  413. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libmanagement.dylib +0 -0
  414. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libmanagement_agent.dylib +0 -0
  415. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libmanagement_ext.dylib +0 -0
  416. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libmlib_image.dylib +0 -0
  417. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libnet.dylib +0 -0
  418. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libnio.dylib +0 -0
  419. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libosx.dylib +0 -0
  420. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libosxapp.dylib +0 -0
  421. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libosxkrb5.dylib +0 -0
  422. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libosxsecurity.dylib +0 -0
  423. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libosxui.dylib +0 -0
  424. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libprefs.dylib +0 -0
  425. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/librmi.dylib +0 -0
  426. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libsplashscreen.dylib +0 -0
  427. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libsyslookup.dylib +0 -0
  428. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libverify.dylib +0 -0
  429. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/libzip.dylib +0 -0
  430. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/modules +0 -0
  431. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/psfontj2d.properties +323 -0
  432. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/security/public_suffix_list.dat +0 -0
  433. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/server/libjsig.dylib +0 -0
  434. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/server/libjvm.dylib +0 -0
  435. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/shaders.metallib +0 -0
  436. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/lib/tzdb.dat +0 -0
  437. quarchpy/connection_specific/jdk_jres/mac_amd64_jdk_jre/release +2 -0
  438. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-console-l1-1-0.dll +0 -0
  439. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-datetime-l1-1-0.dll +0 -0
  440. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-debug-l1-1-0.dll +0 -0
  441. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
  442. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-file-l1-1-0.dll +0 -0
  443. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-file-l1-2-0.dll +0 -0
  444. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-file-l2-1-0.dll +0 -0
  445. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-handle-l1-1-0.dll +0 -0
  446. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-heap-l1-1-0.dll +0 -0
  447. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
  448. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
  449. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-localization-l1-2-0.dll +0 -0
  450. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-memory-l1-1-0.dll +0 -0
  451. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
  452. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
  453. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
  454. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
  455. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-profile-l1-1-0.dll +0 -0
  456. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
  457. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-string-l1-1-0.dll +0 -0
  458. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-synch-l1-1-0.dll +0 -0
  459. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-synch-l1-2-0.dll +0 -0
  460. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
  461. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-timezone-l1-1-0.dll +0 -0
  462. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-core-util-l1-1-0.dll +0 -0
  463. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-conio-l1-1-0.dll +0 -0
  464. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-convert-l1-1-0.dll +0 -0
  465. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-environment-l1-1-0.dll +0 -0
  466. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
  467. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-heap-l1-1-0.dll +0 -0
  468. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-locale-l1-1-0.dll +0 -0
  469. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-math-l1-1-0.dll +0 -0
  470. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-multibyte-l1-1-0.dll +0 -0
  471. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-private-l1-1-0.dll +0 -0
  472. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-process-l1-1-0.dll +0 -0
  473. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
  474. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
  475. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-string-l1-1-0.dll +0 -0
  476. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-time-l1-1-0.dll +0 -0
  477. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/api-ms-win-crt-utility-l1-1-0.dll +0 -0
  478. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/awt.dll +0 -0
  479. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/dt_socket.dll +0 -0
  480. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/extnet.dll +0 -0
  481. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/fontmanager.dll +0 -0
  482. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/freetype.dll +0 -0
  483. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/instrument.dll +0 -0
  484. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/j2gss.dll +0 -0
  485. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/j2pcsc.dll +0 -0
  486. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/j2pkcs11.dll +0 -0
  487. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jaas.dll +0 -0
  488. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jabswitch.exe +0 -0
  489. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jaccessinspector.exe +0 -0
  490. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jaccesswalker.exe +0 -0
  491. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/java.dll +0 -0
  492. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/java.exe +0 -0
  493. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/javaaccessbridge.dll +0 -0
  494. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/javajpeg.dll +0 -0
  495. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/javaw.exe +0 -0
  496. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jawt.dll +0 -0
  497. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jdwp.dll +0 -0
  498. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jfr.exe +0 -0
  499. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jimage.dll +0 -0
  500. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jli.dll +0 -0
  501. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jrunscript.exe +0 -0
  502. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jsound.dll +0 -0
  503. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jsvml.dll +0 -0
  504. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/jwebserver.exe +0 -0
  505. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/keytool.exe +0 -0
  506. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/kinit.exe +0 -0
  507. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/klist.exe +0 -0
  508. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/ktab.exe +0 -0
  509. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/lcms.dll +0 -0
  510. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/management.dll +0 -0
  511. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/management_agent.dll +0 -0
  512. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/management_ext.dll +0 -0
  513. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/mlib_image.dll +0 -0
  514. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/msvcp140.dll +0 -0
  515. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/net.dll +0 -0
  516. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/nio.dll +0 -0
  517. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/prefs.dll +0 -0
  518. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/rmi.dll +0 -0
  519. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/rmiregistry.exe +0 -0
  520. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/server/jvm.dll +0 -0
  521. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/splashscreen.dll +0 -0
  522. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/sspi_bridge.dll +0 -0
  523. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/syslookup.dll +0 -0
  524. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/ucrtbase.dll +0 -0
  525. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/vcruntime140.dll +0 -0
  526. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/vcruntime140_1.dll +0 -0
  527. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/verify.dll +0 -0
  528. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/w2k_lsa_auth.dll +0 -0
  529. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/windowsaccessbridge-64.dll +0 -0
  530. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/bin/zip.dll +0 -0
  531. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/conf/jaxp-strict.properties.template +123 -0
  532. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/conf/jaxp.properties +200 -0
  533. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/conf/logging.properties +63 -0
  534. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/conf/management/management.properties +326 -0
  535. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/conf/net.properties +166 -0
  536. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/conf/security/java.security +1518 -0
  537. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.base/asm.md +36 -0
  538. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.base/cldr.md +100 -0
  539. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.base/icu.md +93 -0
  540. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.base/public_suffix.md +399 -0
  541. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.base/unicode.md +269 -0
  542. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.compiler/ADDITIONAL_LICENSE_INFO +1 -0
  543. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.compiler/ASSEMBLY_EXCEPTION +1 -0
  544. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.compiler/LICENSE +1 -0
  545. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.datatransfer/ADDITIONAL_LICENSE_INFO +1 -0
  546. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.datatransfer/ASSEMBLY_EXCEPTION +1 -0
  547. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.datatransfer/LICENSE +1 -0
  548. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.desktop/ADDITIONAL_LICENSE_INFO +1 -0
  549. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.desktop/ASSEMBLY_EXCEPTION +1 -0
  550. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.desktop/LICENSE +1 -0
  551. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.desktop/freetype.md +649 -0
  552. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.desktop/giflib.md +46 -0
  553. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.instrument/ADDITIONAL_LICENSE_INFO +1 -0
  554. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.instrument/ASSEMBLY_EXCEPTION +1 -0
  555. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.instrument/LICENSE +1 -0
  556. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.logging/ADDITIONAL_LICENSE_INFO +1 -0
  557. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.logging/ASSEMBLY_EXCEPTION +1 -0
  558. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.logging/LICENSE +1 -0
  559. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.management/ADDITIONAL_LICENSE_INFO +1 -0
  560. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.management/ASSEMBLY_EXCEPTION +1 -0
  561. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.management/LICENSE +1 -0
  562. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.management.rmi/ADDITIONAL_LICENSE_INFO +1 -0
  563. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.management.rmi/ASSEMBLY_EXCEPTION +1 -0
  564. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.management.rmi/LICENSE +1 -0
  565. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.naming/ADDITIONAL_LICENSE_INFO +1 -0
  566. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.naming/ASSEMBLY_EXCEPTION +1 -0
  567. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.naming/LICENSE +1 -0
  568. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.net.http/ADDITIONAL_LICENSE_INFO +1 -0
  569. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.net.http/ASSEMBLY_EXCEPTION +1 -0
  570. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.net.http/LICENSE +1 -0
  571. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.prefs/ADDITIONAL_LICENSE_INFO +1 -0
  572. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.prefs/ASSEMBLY_EXCEPTION +1 -0
  573. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.prefs/LICENSE +1 -0
  574. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.rmi/ADDITIONAL_LICENSE_INFO +1 -0
  575. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.rmi/ASSEMBLY_EXCEPTION +1 -0
  576. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.rmi/LICENSE +1 -0
  577. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.scripting/ADDITIONAL_LICENSE_INFO +1 -0
  578. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.scripting/ASSEMBLY_EXCEPTION +1 -0
  579. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.scripting/LICENSE +1 -0
  580. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.se/ADDITIONAL_LICENSE_INFO +1 -0
  581. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.se/ASSEMBLY_EXCEPTION +1 -0
  582. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.se/LICENSE +1 -0
  583. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.security.jgss/ADDITIONAL_LICENSE_INFO +1 -0
  584. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.security.jgss/ASSEMBLY_EXCEPTION +1 -0
  585. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.security.jgss/LICENSE +1 -0
  586. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.security.sasl/ADDITIONAL_LICENSE_INFO +1 -0
  587. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.security.sasl/ASSEMBLY_EXCEPTION +1 -0
  588. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.security.sasl/LICENSE +1 -0
  589. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.smartcardio/ADDITIONAL_LICENSE_INFO +1 -0
  590. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.smartcardio/ASSEMBLY_EXCEPTION +1 -0
  591. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.smartcardio/LICENSE +1 -0
  592. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.sql/ADDITIONAL_LICENSE_INFO +1 -0
  593. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.sql/ASSEMBLY_EXCEPTION +1 -0
  594. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.sql/LICENSE +1 -0
  595. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.sql.rowset/ADDITIONAL_LICENSE_INFO +1 -0
  596. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.sql.rowset/ASSEMBLY_EXCEPTION +1 -0
  597. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.sql.rowset/LICENSE +1 -0
  598. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.transaction.xa/ADDITIONAL_LICENSE_INFO +1 -0
  599. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.transaction.xa/ASSEMBLY_EXCEPTION +1 -0
  600. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.transaction.xa/LICENSE +1 -0
  601. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/ADDITIONAL_LICENSE_INFO +1 -0
  602. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/ASSEMBLY_EXCEPTION +1 -0
  603. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/LICENSE +1 -0
  604. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/schema10part1.md +51 -0
  605. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/schema10part2.md +50 -0
  606. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xalan.md +255 -0
  607. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xhtml10.md +57 -0
  608. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xhtml10schema.md +150 -0
  609. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xhtml11.md +68 -0
  610. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xhtml11schema.md +60 -0
  611. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xmlspec.md +63 -0
  612. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml/xmlxsd.md +43 -0
  613. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml.crypto/ADDITIONAL_LICENSE_INFO +1 -0
  614. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml.crypto/ASSEMBLY_EXCEPTION +1 -0
  615. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/java.xml.crypto/LICENSE +1 -0
  616. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.accessibility/ADDITIONAL_LICENSE_INFO +1 -0
  617. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.accessibility/ASSEMBLY_EXCEPTION +1 -0
  618. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.accessibility/LICENSE +1 -0
  619. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.charsets/ADDITIONAL_LICENSE_INFO +1 -0
  620. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.charsets/ASSEMBLY_EXCEPTION +1 -0
  621. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.charsets/LICENSE +1 -0
  622. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.cryptoki/ADDITIONAL_LICENSE_INFO +1 -0
  623. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.cryptoki/ASSEMBLY_EXCEPTION +1 -0
  624. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.cryptoki/LICENSE +1 -0
  625. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +76 -0
  626. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.ec/ADDITIONAL_LICENSE_INFO +1 -0
  627. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.ec/ASSEMBLY_EXCEPTION +1 -0
  628. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.crypto.ec/LICENSE +1 -0
  629. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.dynalink/ADDITIONAL_LICENSE_INFO +1 -0
  630. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.dynalink/ASSEMBLY_EXCEPTION +1 -0
  631. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.dynalink/LICENSE +1 -0
  632. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.httpserver/ADDITIONAL_LICENSE_INFO +1 -0
  633. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.httpserver/ASSEMBLY_EXCEPTION +1 -0
  634. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.httpserver/LICENSE +1 -0
  635. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.incubator.vector/ADDITIONAL_LICENSE_INFO +1 -0
  636. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.incubator.vector/ASSEMBLY_EXCEPTION +1 -0
  637. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.incubator.vector/LICENSE +1 -0
  638. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.internal.vm.ci/ADDITIONAL_LICENSE_INFO +1 -0
  639. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.internal.vm.ci/ASSEMBLY_EXCEPTION +1 -0
  640. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.internal.vm.ci/LICENSE +1 -0
  641. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jdwp.agent/ADDITIONAL_LICENSE_INFO +1 -0
  642. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jdwp.agent/ASSEMBLY_EXCEPTION +1 -0
  643. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jdwp.agent/LICENSE +1 -0
  644. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jfr/ADDITIONAL_LICENSE_INFO +1 -0
  645. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jfr/ASSEMBLY_EXCEPTION +1 -0
  646. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jfr/LICENSE +1 -0
  647. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jsobject/ADDITIONAL_LICENSE_INFO +1 -0
  648. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jsobject/ASSEMBLY_EXCEPTION +1 -0
  649. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.jsobject/LICENSE +1 -0
  650. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.localedata/ADDITIONAL_LICENSE_INFO +1 -0
  651. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.localedata/ASSEMBLY_EXCEPTION +1 -0
  652. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.localedata/LICENSE +1 -0
  653. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.localedata/cldr.md +1 -0
  654. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management/ADDITIONAL_LICENSE_INFO +1 -0
  655. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management/ASSEMBLY_EXCEPTION +1 -0
  656. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management/LICENSE +1 -0
  657. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management.agent/ADDITIONAL_LICENSE_INFO +1 -0
  658. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management.agent/ASSEMBLY_EXCEPTION +1 -0
  659. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management.agent/LICENSE +1 -0
  660. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management.jfr/ADDITIONAL_LICENSE_INFO +1 -0
  661. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management.jfr/ASSEMBLY_EXCEPTION +1 -0
  662. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.management.jfr/LICENSE +1 -0
  663. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.naming.dns/ADDITIONAL_LICENSE_INFO +1 -0
  664. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.naming.dns/ASSEMBLY_EXCEPTION +1 -0
  665. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.naming.dns/LICENSE +1 -0
  666. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.naming.rmi/ADDITIONAL_LICENSE_INFO +1 -0
  667. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.naming.rmi/ASSEMBLY_EXCEPTION +1 -0
  668. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.naming.rmi/LICENSE +1 -0
  669. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.net/ADDITIONAL_LICENSE_INFO +1 -0
  670. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.net/ASSEMBLY_EXCEPTION +1 -0
  671. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.net/LICENSE +1 -0
  672. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.nio.mapmode/ADDITIONAL_LICENSE_INFO +1 -0
  673. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.nio.mapmode/ASSEMBLY_EXCEPTION +1 -0
  674. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.nio.mapmode/LICENSE +1 -0
  675. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.sctp/ADDITIONAL_LICENSE_INFO +1 -0
  676. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.sctp/ASSEMBLY_EXCEPTION +1 -0
  677. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.sctp/LICENSE +1 -0
  678. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.security.auth/ADDITIONAL_LICENSE_INFO +1 -0
  679. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.security.auth/ASSEMBLY_EXCEPTION +1 -0
  680. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.security.auth/LICENSE +1 -0
  681. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.security.jgss/ADDITIONAL_LICENSE_INFO +1 -0
  682. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.security.jgss/ASSEMBLY_EXCEPTION +1 -0
  683. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.security.jgss/LICENSE +1 -0
  684. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.unsupported/ADDITIONAL_LICENSE_INFO +1 -0
  685. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.unsupported/ASSEMBLY_EXCEPTION +1 -0
  686. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.unsupported/LICENSE +1 -0
  687. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.unsupported.desktop/ADDITIONAL_LICENSE_INFO +1 -0
  688. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.unsupported.desktop/ASSEMBLY_EXCEPTION +1 -0
  689. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.unsupported.desktop/LICENSE +1 -0
  690. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.xml.dom/ADDITIONAL_LICENSE_INFO +1 -0
  691. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.xml.dom/ASSEMBLY_EXCEPTION +1 -0
  692. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.xml.dom/LICENSE +1 -0
  693. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.zipfs/ADDITIONAL_LICENSE_INFO +1 -0
  694. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.zipfs/ASSEMBLY_EXCEPTION +1 -0
  695. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/legal/jdk.zipfs/LICENSE +1 -0
  696. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/classlist +1601 -0
  697. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/jawt.lib +0 -0
  698. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/jfr/default.jfc +1152 -0
  699. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/jfr/profile.jfc +1151 -0
  700. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/jrt-fs.jar +0 -0
  701. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/jvm.lib +0 -0
  702. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/modules +0 -0
  703. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/psfontj2d.properties +323 -0
  704. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/security/blocked.certs +39 -0
  705. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/security/public_suffix_list.dat +0 -0
  706. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/tzdb.dat +0 -0
  707. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/lib/tzmappings +361 -0
  708. quarchpy/connection_specific/jdk_jres/win_amd64_jdk_jre/release +2 -0
  709. quarchpy/connection_specific/mDNS.py +1 -3
  710. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-310.pyc +0 -0
  711. quarchpy/connection_specific/serial/__pycache__/serialposix.cpython-310.pyc +0 -0
  712. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-310.pyc +0 -0
  713. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-310.pyc +0 -0
  714. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-310.pyc +0 -0
  715. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-310.pyc +0 -0
  716. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_linux.cpython-310.pyc +0 -0
  717. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_posix.cpython-310.pyc +0 -0
  718. quarchpy/connection_specific/usb_libs/usb1.py +4 -4
  719. quarchpy/debug/SystemTest.py +84 -29
  720. quarchpy/debug/__pycache__/SystemTest.cpython-310.pyc +0 -0
  721. quarchpy/debug/__pycache__/__init__.cpython-310.pyc +0 -0
  722. quarchpy/debug/__pycache__/versionCompare.cpython-310.pyc +0 -0
  723. quarchpy/debug/module_debug.py +25 -26
  724. quarchpy/debug/simple_terminal.py +23 -18
  725. quarchpy/device/__init__.py +4 -4
  726. quarchpy/device/__pycache__/__init__.cpython-310.pyc +0 -0
  727. quarchpy/device/__pycache__/device.cpython-310.pyc +0 -0
  728. quarchpy/device/__pycache__/quarchArray.cpython-310.pyc +0 -0
  729. quarchpy/device/__pycache__/quarchPPM.cpython-310.pyc +0 -0
  730. quarchpy/device/__pycache__/quarchQPS.cpython-310.pyc +0 -0
  731. quarchpy/device/__pycache__/scanDevices.cpython-310.pyc +0 -0
  732. quarchpy/device/device.py +1245 -440
  733. quarchpy/device/quarchArray.py +2 -2
  734. quarchpy/device/quarchPPM.py +370 -113
  735. quarchpy/device/quarchQPS.py +765 -303
  736. quarchpy/device/scanDevices.py +116 -105
  737. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-310.pyc +0 -0
  738. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-310.pyc +0 -0
  739. quarchpy/disk_test/__pycache__/__init__.cpython-310.pyc +0 -0
  740. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-310.pyc +0 -0
  741. quarchpy/docs/CHANGES.rst +452 -443
  742. quarchpy/docs/Makefile +20 -20
  743. quarchpy/docs/_build/html/.buildinfo +4 -4
  744. quarchpy/docs/_build/html/CHANGES.html +660 -660
  745. quarchpy/docs/_build/html/_sources/CHANGES.rst.txt +439 -439
  746. quarchpy/docs/_build/html/_sources/index.rst.txt +23 -23
  747. quarchpy/docs/_build/html/_sources/readme.rst.txt +41 -41
  748. quarchpy/docs/_build/html/_sources/source/modules.rst.txt +7 -7
  749. quarchpy/docs/_build/html/_sources/source/quarchpy.calibration.rst.txt +78 -78
  750. quarchpy/docs/_build/html/_sources/source/quarchpy.config_files.rst.txt +22 -22
  751. quarchpy/docs/_build/html/_sources/source/quarchpy.connection_specific.rst.txt +76 -76
  752. quarchpy/docs/_build/html/_sources/source/quarchpy.debug.rst.txt +38 -38
  753. quarchpy/docs/_build/html/_sources/source/quarchpy.device.rst.txt +54 -54
  754. quarchpy/docs/_build/html/_sources/source/quarchpy.disk_test.rst.txt +126 -126
  755. quarchpy/docs/_build/html/_sources/source/quarchpy.fio.rst.txt +30 -30
  756. quarchpy/docs/_build/html/_sources/source/quarchpy.iometer.rst.txt +22 -22
  757. quarchpy/docs/_build/html/_sources/source/quarchpy.qis.rst.txt +22 -22
  758. quarchpy/docs/_build/html/_sources/source/quarchpy.qps.rst.txt +22 -22
  759. quarchpy/docs/_build/html/_sources/source/quarchpy.rst.txt +50 -50
  760. quarchpy/docs/_build/html/_sources/source/quarchpy.user_interface.rst.txt +22 -22
  761. quarchpy/docs/_build/html/_sources/source/quarchpy.utilities.rst.txt +22 -22
  762. quarchpy/docs/_build/html/_static/alabaster.css +662 -662
  763. quarchpy/docs/_build/html/_static/basic.css +913 -913
  764. quarchpy/docs/_build/html/_static/custom.css +1 -1
  765. quarchpy/docs/_build/html/_static/doctools.js +149 -149
  766. quarchpy/docs/_build/html/_static/documentation_options.js +12 -12
  767. quarchpy/docs/_build/html/_static/jquery-3.4.1.js +10598 -10598
  768. quarchpy/docs/_build/html/_static/jquery.js +2 -2
  769. quarchpy/docs/_build/html/_static/language_data.js +192 -192
  770. quarchpy/docs/_build/html/_static/pygments.css +83 -83
  771. quarchpy/docs/_build/html/_static/searchtools.js +632 -632
  772. quarchpy/docs/_build/html/_static/sphinx_highlight.js +154 -154
  773. quarchpy/docs/_build/html/_static/underscore-1.3.1.js +999 -999
  774. quarchpy/docs/_build/html/_static/underscore.js +5 -5
  775. quarchpy/docs/_build/html/genindex.html +1626 -1626
  776. quarchpy/docs/_build/html/index.html +214 -214
  777. quarchpy/docs/_build/html/py-modindex.html +300 -300
  778. quarchpy/docs/_build/html/readme.html +137 -137
  779. quarchpy/docs/_build/html/search.html +123 -123
  780. quarchpy/docs/_build/html/source/changelog.html +739 -739
  781. quarchpy/docs/_build/html/source/licenses.html +181 -181
  782. quarchpy/docs/_build/html/source/modules.html +222 -222
  783. quarchpy/docs/_build/html/source/quarchpy.calibration.html +147 -147
  784. quarchpy/docs/_build/html/source/quarchpy.config_files.html +136 -136
  785. quarchpy/docs/_build/html/source/quarchpy.connection_specific.html +729 -729
  786. quarchpy/docs/_build/html/source/quarchpy.debug.html +251 -251
  787. quarchpy/docs/_build/html/source/quarchpy.device.html +1165 -1165
  788. quarchpy/docs/_build/html/source/quarchpy.disk_test.html +220 -220
  789. quarchpy/docs/_build/html/source/quarchpy.fio.html +218 -218
  790. quarchpy/docs/_build/html/source/quarchpy.html +715 -715
  791. quarchpy/docs/_build/html/source/quarchpy.iometer.html +271 -271
  792. quarchpy/docs/_build/html/source/quarchpy.qis.html +640 -640
  793. quarchpy/docs/_build/html/source/quarchpy.qps.html +186 -186
  794. quarchpy/docs/_build/html/source/quarchpy.user_interface.html +278 -278
  795. quarchpy/docs/_build/html/source/quarchpy.utilities.html +211 -211
  796. quarchpy/docs/_build/html/source/readme.html +147 -147
  797. quarchpy/docs/conf.py +56 -56
  798. quarchpy/docs/index.rst +23 -23
  799. quarchpy/docs/make.bat +35 -35
  800. quarchpy/docs/readme.rst +41 -41
  801. quarchpy/docs/source/modules.rst +7 -7
  802. quarchpy/docs/source/quarchpy.calibration.rst +78 -78
  803. quarchpy/docs/source/quarchpy.config_files.rst +22 -22
  804. quarchpy/docs/source/quarchpy.connection_specific.rst +76 -76
  805. quarchpy/docs/source/quarchpy.debug.rst +38 -38
  806. quarchpy/docs/source/quarchpy.device.rst +54 -54
  807. quarchpy/docs/source/quarchpy.disk_test.rst +126 -126
  808. quarchpy/docs/source/quarchpy.fio.rst +30 -30
  809. quarchpy/docs/source/quarchpy.iometer.rst +22 -22
  810. quarchpy/docs/source/quarchpy.qis.rst +22 -22
  811. quarchpy/docs/source/quarchpy.qps.rst +22 -22
  812. quarchpy/docs/source/quarchpy.rst +50 -50
  813. quarchpy/docs/source/quarchpy.user_interface.rst +22 -22
  814. quarchpy/docs/source/quarchpy.utilities.rst +22 -22
  815. quarchpy/fio/FIO_interface.py +0 -1
  816. quarchpy/fio/HIDEtest_performance_class.py +533 -533
  817. quarchpy/fio/__pycache__/FIO_interface.cpython-310.pyc +0 -0
  818. quarchpy/fio/__pycache__/__init__.cpython-310.pyc +0 -0
  819. quarchpy/iometer/__pycache__/__init__.cpython-310.pyc +0 -0
  820. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-310.pyc +0 -0
  821. quarchpy/iometer/__pycache__/iometerFuncs.cpython-310.pyc +0 -0
  822. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-310.pyc +0 -0
  823. quarchpy/qis/__pycache__/__init__.cpython-310.pyc +0 -0
  824. quarchpy/qis/__pycache__/qisFuncs.cpython-310.pyc +0 -0
  825. quarchpy/qis/qisFuncs.py +57 -58
  826. quarchpy/qps/__pycache__/__init__.cpython-310.pyc +0 -0
  827. quarchpy/qps/__pycache__/qpsFuncs.cpython-310.pyc +0 -0
  828. quarchpy/qps/qpsFuncs.py +14 -21
  829. quarchpy/run.py +3 -3
  830. quarchpy/user_interface/__pycache__/__init__.cpython-310.pyc +0 -0
  831. quarchpy/user_interface/__pycache__/user_interface.cpython-310.pyc +0 -0
  832. quarchpy/utilities/TestCenter.py +58 -34
  833. quarchpy/utilities/__pycache__/TestCenter.cpython-310.pyc +0 -0
  834. quarchpy/utilities/__pycache__/TimeValue.cpython-310.pyc +0 -0
  835. quarchpy/utilities/__pycache__/__init__.cpython-310.pyc +0 -0
  836. quarchpy-2.2.10.dist-info/METADATA +475 -0
  837. quarchpy-2.2.10.dist-info/RECORD +1618 -0
  838. quarchpy-2.2.10.dist-info/WHEEL +6 -0
  839. quarchpy/.idea/.name +0 -1
  840. quarchpy/.idea/inspectionProfiles/Project_Default.xml +0 -50
  841. quarchpy/.idea/inspectionProfiles/profiles_settings.xml +0 -6
  842. quarchpy/.idea/misc.xml +0 -7
  843. quarchpy/.idea/modules.xml +0 -8
  844. quarchpy/.idea/quarchpy.iml +0 -12
  845. quarchpy/.idea/vcs.xml +0 -7
  846. quarchpy/.idea/workspace.xml +0 -273
  847. quarchpy/__pycache__/__init__.cpython-311.pyc +0 -0
  848. quarchpy/__pycache__/__init__.cpython-312.pyc +0 -0
  849. quarchpy/__pycache__/__init__.cpython-313.pyc +0 -0
  850. quarchpy/__pycache__/_version.cpython-311.pyc +0 -0
  851. quarchpy/__pycache__/_version.cpython-312.pyc +0 -0
  852. quarchpy/__pycache__/_version.cpython-313.pyc +0 -0
  853. quarchpy/__pycache__/connection.cpython-311.pyc +0 -0
  854. quarchpy/__pycache__/connection.cpython-312.pyc +0 -0
  855. quarchpy/__pycache__/connection.cpython-313.pyc +0 -0
  856. quarchpy/__pycache__/run.cpython-311.pyc +0 -0
  857. quarchpy/__pycache__/run.cpython-312.pyc +0 -0
  858. quarchpy/config_files/__pycache__/__init__.cpython-311.pyc +0 -0
  859. quarchpy/config_files/__pycache__/__init__.cpython-312.pyc +0 -0
  860. quarchpy/config_files/__pycache__/__init__.cpython-313.pyc +0 -0
  861. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-311.pyc +0 -0
  862. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-312.pyc +0 -0
  863. quarchpy/config_files/__pycache__/quarch_config_parser.cpython-313.pyc +0 -0
  864. quarchpy/connection_specific/QPS/win-amd64/License/Material-Icons-license.txt +0 -51
  865. quarchpy/connection_specific/QPS/win-amd64/License/Netty-license.txt +0 -143
  866. quarchpy/connection_specific/QPS/win-amd64/License/argparse4j-license.txt +0 -25
  867. quarchpy/connection_specific/QPS/win-amd64/License/controlsfx-license.txt +0 -26
  868. quarchpy/connection_specific/QPS/win-amd64/License/usb4java-license.txt +0 -167
  869. quarchpy/connection_specific/QPS/win-amd64/launchQPSJ21.bat +0 -4
  870. quarchpy/connection_specific/QPS/win-amd64/launchQPSJ21.sh +0 -4
  871. quarchpy/connection_specific/QPS/win-amd64/qis/License/LGPL.txt +0 -167
  872. quarchpy/connection_specific/QPS/win-amd64/qis/License/LICENSE.txt +0 -202
  873. quarchpy/connection_specific/QPS/win-amd64/qis/License/NOTICE.txt +0 -143
  874. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/CInterface-2.3.jar +0 -0
  875. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/QuarchCommon-2.0.jar +0 -0
  876. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.0.jar +0 -0
  877. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/TorridonCommon-1.1.jar +0 -0
  878. quarchpy/connection_specific/QPS/win-amd64/qis/qis_lib/jmdns-3.5.9.jar +0 -0
  879. quarchpy/connection_specific/QPS/win-amd64/qps_lib/QuarchCommon-2.0.jar +0 -0
  880. quarchpy/connection_specific/QPS/win-amd64/qps_lib/commons-io-2.18.0.jar +0 -0
  881. quarchpy/connection_specific/QPS/win-amd64/qps_lib/controlsfx-11.2.1.jar +0 -0
  882. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-base-21.0.6-linux-aarch64.jar +0 -0
  883. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-controls-21.0.6-linux-aarch64.jar +0 -0
  884. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-fxml-21.0.6-linux-aarch64.jar +0 -0
  885. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-graphics-21.0.6-linux-aarch64.jar +0 -0
  886. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-arm64/javafx-swing-21.0.6-linux-aarch64.jar +0 -0
  887. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-base-21.0.6-linux.jar +0 -0
  888. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-controls-21.0.6-linux.jar +0 -0
  889. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-fxml-21.0.6-linux.jar +0 -0
  890. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-graphics-21.0.6-linux.jar +0 -0
  891. quarchpy/connection_specific/QPS/win-amd64/qps_lib/lin-x64/javafx-swing-21.0.6-linux.jar +0 -0
  892. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-base-21.0.6-mac-aarch64.jar +0 -0
  893. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-controls-21.0.6-mac-aarch64.jar +0 -0
  894. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-fxml-21.0.6-mac-aarch64.jar +0 -0
  895. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-graphics-21.0.6-mac-aarch64.jar +0 -0
  896. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-arm64/javafx-swing-21.0.6-mac-aarch64.jar +0 -0
  897. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-base-21.0.6-mac.jar +0 -0
  898. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-controls-21.0.6-mac.jar +0 -0
  899. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-fxml-21.0.6-mac.jar +0 -0
  900. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-graphics-21.0.6-mac.jar +0 -0
  901. quarchpy/connection_specific/QPS/win-amd64/qps_lib/mac-x64/javafx-swing-21.0.6-mac.jar +0 -0
  902. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-base-21.0.6-win.jar +0 -0
  903. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-controls-21.0.6-win.jar +0 -0
  904. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-fxml-21.0.6-win.jar +0 -0
  905. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-graphics-21.0.6-win.jar +0 -0
  906. quarchpy/connection_specific/QPS/win-amd64/qps_lib/win-x64/javafx-swing-21.0.6-win.jar +0 -0
  907. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-311.pyc +0 -0
  908. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-312.pyc +0 -0
  909. quarchpy/connection_specific/__pycache__/StreamChannels.cpython-313.pyc +0 -0
  910. quarchpy/connection_specific/__pycache__/__init__.cpython-311.pyc +0 -0
  911. quarchpy/connection_specific/__pycache__/__init__.cpython-312.pyc +0 -0
  912. quarchpy/connection_specific/__pycache__/__init__.cpython-313.pyc +0 -0
  913. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-311.pyc +0 -0
  914. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-312.pyc +0 -0
  915. quarchpy/connection_specific/__pycache__/connection_QIS.cpython-313.pyc +0 -0
  916. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-311.pyc +0 -0
  917. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-312.pyc +0 -0
  918. quarchpy/connection_specific/__pycache__/connection_QPS.cpython-313.pyc +0 -0
  919. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-311.pyc +0 -0
  920. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-312.pyc +0 -0
  921. quarchpy/connection_specific/__pycache__/connection_ReST.cpython-313.pyc +0 -0
  922. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-311.pyc +0 -0
  923. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-312.pyc +0 -0
  924. quarchpy/connection_specific/__pycache__/connection_Serial.cpython-313.pyc +0 -0
  925. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-311.pyc +0 -0
  926. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-312.pyc +0 -0
  927. quarchpy/connection_specific/__pycache__/connection_TCP.cpython-313.pyc +0 -0
  928. quarchpy/connection_specific/__pycache__/connection_USB.cpython-311.pyc +0 -0
  929. quarchpy/connection_specific/__pycache__/connection_USB.cpython-312.pyc +0 -0
  930. quarchpy/connection_specific/__pycache__/connection_USB.cpython-313.pyc +0 -0
  931. quarchpy/connection_specific/__pycache__/mDNS.cpython-311.pyc +0 -0
  932. quarchpy/connection_specific/__pycache__/mDNS.cpython-312.pyc +0 -0
  933. quarchpy/connection_specific/__pycache__/mDNS.cpython-313.pyc +0 -0
  934. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-311.pyc +0 -0
  935. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-312.pyc +0 -0
  936. quarchpy/connection_specific/jdk_j21_jres/__pycache__/__init__.cpython-313.pyc +0 -0
  937. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-311.pyc +0 -0
  938. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-312.pyc +0 -0
  939. quarchpy/connection_specific/jdk_j21_jres/__pycache__/fix_permissions.cpython-313.pyc +0 -0
  940. quarchpy/connection_specific/jdk_j21_jres/fix_permissions.py +0 -70
  941. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/java +0 -0
  942. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/jfr +0 -0
  943. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/jrunscript +0 -0
  944. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/jwebserver +0 -0
  945. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/keytool +0 -0
  946. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/bin/rmiregistry +0 -0
  947. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/jaxp.properties +0 -180
  948. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/logging.properties +0 -63
  949. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/management/management.properties +0 -327
  950. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/net.properties +0 -164
  951. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/security/java.policy +0 -46
  952. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/conf/security/java.security +0 -1509
  953. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/asm.md +0 -36
  954. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/cldr.md +0 -109
  955. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/icu.md +0 -518
  956. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/public_suffix.md +0 -399
  957. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.base/unicode.md +0 -103
  958. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.desktop/freetype.md +0 -649
  959. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.desktop/giflib.md +0 -50
  960. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.smartcardio/pcsclite.md +0 -57
  961. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/java.xml/xalan.md +0 -255
  962. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +0 -72
  963. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO +0 -37
  964. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION +0 -27
  965. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/LICENSE +0 -347
  966. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO +0 -37
  967. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION +0 -27
  968. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/LICENSE +0 -347
  969. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/legal/jdk.localedata/cldr.md +0 -109
  970. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/classlist +0 -1502
  971. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jexec +0 -0
  972. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jfr/default.jfc +0 -1126
  973. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jfr/profile.jfc +0 -1126
  974. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jrt-fs.jar +0 -0
  975. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/jspawnhelper +0 -0
  976. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libawt.so +0 -0
  977. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libawt_headless.so +0 -0
  978. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libawt_xawt.so +0 -0
  979. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libdt_socket.so +0 -0
  980. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libextnet.so +0 -0
  981. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libfontmanager.so +0 -0
  982. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libfreetype.so +0 -0
  983. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libinstrument.so +0 -0
  984. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libj2gss.so +0 -0
  985. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libj2pcsc.so +0 -0
  986. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libj2pkcs11.so +0 -0
  987. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjaas.so +0 -0
  988. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjava.so +0 -0
  989. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjavajpeg.so +0 -0
  990. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjawt.so +0 -0
  991. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjdwp.so +0 -0
  992. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjimage.so +0 -0
  993. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjli.so +0 -0
  994. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjsig.so +0 -0
  995. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjsound.so +0 -0
  996. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libjsvml.so +0 -0
  997. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/liblcms.so +0 -0
  998. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmanagement.so +0 -0
  999. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmanagement_agent.so +0 -0
  1000. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmanagement_ext.so +0 -0
  1001. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libmlib_image.so +0 -0
  1002. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libnet.so +0 -0
  1003. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libnio.so +0 -0
  1004. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libprefs.so +0 -0
  1005. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/librmi.so +0 -0
  1006. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsctp.so +0 -0
  1007. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsplashscreen.so +0 -0
  1008. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libsyslookup.so +0 -0
  1009. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libverify.so +0 -0
  1010. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/libzip.so +0 -0
  1011. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/modules +0 -0
  1012. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/psfontj2d.properties +0 -323
  1013. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/security/default.policy +0 -235
  1014. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/security/public_suffix_list.dat +0 -0
  1015. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/server/libjsig.so +0 -0
  1016. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/server/libjvm.so +0 -0
  1017. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/lib/tzdb.dat +0 -0
  1018. quarchpy/connection_specific/jdk_j21_jres/lin_amd64_jdk_21_jre/release +0 -2
  1019. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/java +0 -0
  1020. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/jfr +0 -0
  1021. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/jrunscript +0 -0
  1022. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/jwebserver +0 -0
  1023. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/keytool +0 -0
  1024. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/bin/rmiregistry +0 -0
  1025. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/jaxp.properties +0 -180
  1026. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/logging.properties +0 -63
  1027. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/management/management.properties +0 -327
  1028. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/net.properties +0 -164
  1029. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/security/java.policy +0 -46
  1030. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/conf/security/java.security +0 -1510
  1031. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/asm.md +0 -36
  1032. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/cldr.md +0 -109
  1033. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/icu.md +0 -518
  1034. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/public_suffix.md +0 -399
  1035. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.base/unicode.md +0 -103
  1036. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.desktop/freetype.md +0 -649
  1037. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.desktop/giflib.md +0 -50
  1038. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.smartcardio/pcsclite.md +0 -57
  1039. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/java.xml/xalan.md +0 -255
  1040. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +0 -72
  1041. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO +0 -37
  1042. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION +0 -27
  1043. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/LICENSE +0 -347
  1044. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO +0 -37
  1045. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION +0 -27
  1046. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/LICENSE +0 -347
  1047. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/legal/jdk.localedata/cldr.md +0 -109
  1048. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/classlist +0 -1497
  1049. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jfr/default.jfc +0 -1126
  1050. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jfr/profile.jfc +0 -1126
  1051. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jrt-fs.jar +0 -0
  1052. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/jspawnhelper +0 -0
  1053. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libawt.dylib +0 -0
  1054. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libawt_lwawt.dylib +0 -0
  1055. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libdt_socket.dylib +0 -0
  1056. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libextnet.dylib +0 -0
  1057. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libfontmanager.dylib +0 -0
  1058. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libfreetype.dylib +0 -0
  1059. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libinstrument.dylib +0 -0
  1060. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libj2gss.dylib +0 -0
  1061. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libj2pcsc.dylib +0 -0
  1062. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libj2pkcs11.dylib +0 -0
  1063. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjaas.dylib +0 -0
  1064. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjava.dylib +0 -0
  1065. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjavajpeg.dylib +0 -0
  1066. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjawt.dylib +0 -0
  1067. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjdwp.dylib +0 -0
  1068. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjimage.dylib +0 -0
  1069. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjli.dylib +0 -0
  1070. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjsig.dylib +0 -0
  1071. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libjsound.dylib +0 -0
  1072. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/liblcms.dylib +0 -0
  1073. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmanagement.dylib +0 -0
  1074. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmanagement_agent.dylib +0 -0
  1075. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmanagement_ext.dylib +0 -0
  1076. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libmlib_image.dylib +0 -0
  1077. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libnet.dylib +0 -0
  1078. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libnio.dylib +0 -0
  1079. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosx.dylib +0 -0
  1080. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxapp.dylib +0 -0
  1081. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxkrb5.dylib +0 -0
  1082. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxsecurity.dylib +0 -0
  1083. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libosxui.dylib +0 -0
  1084. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libprefs.dylib +0 -0
  1085. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/librmi.dylib +0 -0
  1086. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libsplashscreen.dylib +0 -0
  1087. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libsyslookup.dylib +0 -0
  1088. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libverify.dylib +0 -0
  1089. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/libzip.dylib +0 -0
  1090. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/modules +0 -0
  1091. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/psfontj2d.properties +0 -323
  1092. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/security/default.policy +0 -235
  1093. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/security/public_suffix_list.dat +0 -0
  1094. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/server/libjsig.dylib +0 -0
  1095. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/server/libjvm.dylib +0 -0
  1096. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/shaders.metallib +0 -0
  1097. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/lib/tzdb.dat +0 -0
  1098. quarchpy/connection_specific/jdk_j21_jres/mac_amd64_jdk_21_jre/release +0 -2
  1099. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-console-l1-1-0.dll +0 -0
  1100. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-datetime-l1-1-0.dll +0 -0
  1101. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-debug-l1-1-0.dll +0 -0
  1102. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-errorhandling-l1-1-0.dll +0 -0
  1103. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-file-l1-1-0.dll +0 -0
  1104. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-file-l1-2-0.dll +0 -0
  1105. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-file-l2-1-0.dll +0 -0
  1106. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-handle-l1-1-0.dll +0 -0
  1107. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-heap-l1-1-0.dll +0 -0
  1108. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-interlocked-l1-1-0.dll +0 -0
  1109. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-libraryloader-l1-1-0.dll +0 -0
  1110. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-localization-l1-2-0.dll +0 -0
  1111. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-memory-l1-1-0.dll +0 -0
  1112. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-namedpipe-l1-1-0.dll +0 -0
  1113. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-processenvironment-l1-1-0.dll +0 -0
  1114. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-processthreads-l1-1-0.dll +0 -0
  1115. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-processthreads-l1-1-1.dll +0 -0
  1116. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-profile-l1-1-0.dll +0 -0
  1117. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-rtlsupport-l1-1-0.dll +0 -0
  1118. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-string-l1-1-0.dll +0 -0
  1119. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-synch-l1-1-0.dll +0 -0
  1120. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-synch-l1-2-0.dll +0 -0
  1121. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-sysinfo-l1-1-0.dll +0 -0
  1122. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-timezone-l1-1-0.dll +0 -0
  1123. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-core-util-l1-1-0.dll +0 -0
  1124. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-conio-l1-1-0.dll +0 -0
  1125. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-convert-l1-1-0.dll +0 -0
  1126. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-environment-l1-1-0.dll +0 -0
  1127. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-filesystem-l1-1-0.dll +0 -0
  1128. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-heap-l1-1-0.dll +0 -0
  1129. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-locale-l1-1-0.dll +0 -0
  1130. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-math-l1-1-0.dll +0 -0
  1131. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-multibyte-l1-1-0.dll +0 -0
  1132. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-private-l1-1-0.dll +0 -0
  1133. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-process-l1-1-0.dll +0 -0
  1134. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-runtime-l1-1-0.dll +0 -0
  1135. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-stdio-l1-1-0.dll +0 -0
  1136. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-string-l1-1-0.dll +0 -0
  1137. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-time-l1-1-0.dll +0 -0
  1138. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/api-ms-win-crt-utility-l1-1-0.dll +0 -0
  1139. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/awt.dll +0 -0
  1140. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/dt_socket.dll +0 -0
  1141. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/extnet.dll +0 -0
  1142. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/fontmanager.dll +0 -0
  1143. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/freetype.dll +0 -0
  1144. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/instrument.dll +0 -0
  1145. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/j2gss.dll +0 -0
  1146. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/j2pcsc.dll +0 -0
  1147. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/j2pkcs11.dll +0 -0
  1148. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jaas.dll +0 -0
  1149. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jabswitch.exe +0 -0
  1150. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jaccessinspector.exe +0 -0
  1151. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jaccesswalker.exe +0 -0
  1152. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/java.dll +0 -0
  1153. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/java.exe +0 -0
  1154. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/javaaccessbridge.dll +0 -0
  1155. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/javajpeg.dll +0 -0
  1156. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/javaw.exe +0 -0
  1157. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jawt.dll +0 -0
  1158. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jdwp.dll +0 -0
  1159. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jfr.exe +0 -0
  1160. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jimage.dll +0 -0
  1161. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jli.dll +0 -0
  1162. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jrunscript.exe +0 -0
  1163. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jsound.dll +0 -0
  1164. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jsvml.dll +0 -0
  1165. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/jwebserver.exe +0 -0
  1166. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/keytool.exe +0 -0
  1167. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/kinit.exe +0 -0
  1168. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/klist.exe +0 -0
  1169. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/ktab.exe +0 -0
  1170. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/lcms.dll +0 -0
  1171. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/management.dll +0 -0
  1172. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/management_agent.dll +0 -0
  1173. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/management_ext.dll +0 -0
  1174. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/mlib_image.dll +0 -0
  1175. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/msvcp140.dll +0 -0
  1176. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/net.dll +0 -0
  1177. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/nio.dll +0 -0
  1178. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/prefs.dll +0 -0
  1179. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/rmi.dll +0 -0
  1180. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/rmiregistry.exe +0 -0
  1181. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/server/jvm.dll +0 -0
  1182. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/splashscreen.dll +0 -0
  1183. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/sspi_bridge.dll +0 -0
  1184. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/syslookup.dll +0 -0
  1185. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/ucrtbase.dll +0 -0
  1186. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/vcruntime140.dll +0 -0
  1187. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/vcruntime140_1.dll +0 -0
  1188. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/verify.dll +0 -0
  1189. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/w2k_lsa_auth.dll +0 -0
  1190. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/windowsaccessbridge-64.dll +0 -0
  1191. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/bin/zip.dll +0 -0
  1192. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/jaxp.properties +0 -180
  1193. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/logging.properties +0 -63
  1194. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/management/management.properties +0 -327
  1195. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/net.properties +0 -168
  1196. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/security/java.policy +0 -46
  1197. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/conf/security/java.security +0 -1510
  1198. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/asm.md +0 -36
  1199. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/cldr.md +0 -109
  1200. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/icu.md +0 -518
  1201. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/public_suffix.md +0 -399
  1202. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.base/unicode.md +0 -103
  1203. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.compiler/ADDITIONAL_LICENSE_INFO +0 -1
  1204. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.compiler/ASSEMBLY_EXCEPTION +0 -1
  1205. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.compiler/LICENSE +0 -1
  1206. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.datatransfer/ADDITIONAL_LICENSE_INFO +0 -1
  1207. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.datatransfer/ASSEMBLY_EXCEPTION +0 -1
  1208. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.datatransfer/LICENSE +0 -1
  1209. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/ADDITIONAL_LICENSE_INFO +0 -1
  1210. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/ASSEMBLY_EXCEPTION +0 -1
  1211. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/LICENSE +0 -1
  1212. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/freetype.md +0 -649
  1213. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.desktop/giflib.md +0 -50
  1214. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.instrument/ADDITIONAL_LICENSE_INFO +0 -1
  1215. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.instrument/ASSEMBLY_EXCEPTION +0 -1
  1216. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.instrument/LICENSE +0 -1
  1217. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.logging/ADDITIONAL_LICENSE_INFO +0 -1
  1218. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.logging/ASSEMBLY_EXCEPTION +0 -1
  1219. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.logging/LICENSE +0 -1
  1220. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.management/ADDITIONAL_LICENSE_INFO +0 -1
  1221. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.management/ASSEMBLY_EXCEPTION +0 -1
  1222. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.management/LICENSE +0 -1
  1223. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.management.rmi/ADDITIONAL_LICENSE_INFO +0 -1
  1224. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.management.rmi/ASSEMBLY_EXCEPTION +0 -1
  1225. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.management.rmi/LICENSE +0 -1
  1226. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.naming/ADDITIONAL_LICENSE_INFO +0 -1
  1227. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.naming/ASSEMBLY_EXCEPTION +0 -1
  1228. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.naming/LICENSE +0 -1
  1229. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.net.http/ADDITIONAL_LICENSE_INFO +0 -1
  1230. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.net.http/ASSEMBLY_EXCEPTION +0 -1
  1231. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.net.http/LICENSE +0 -1
  1232. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.prefs/ADDITIONAL_LICENSE_INFO +0 -1
  1233. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.prefs/ASSEMBLY_EXCEPTION +0 -1
  1234. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.prefs/LICENSE +0 -1
  1235. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.rmi/ADDITIONAL_LICENSE_INFO +0 -1
  1236. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.rmi/ASSEMBLY_EXCEPTION +0 -1
  1237. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.rmi/LICENSE +0 -1
  1238. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.scripting/ADDITIONAL_LICENSE_INFO +0 -1
  1239. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.scripting/ASSEMBLY_EXCEPTION +0 -1
  1240. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.scripting/LICENSE +0 -1
  1241. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.se/ADDITIONAL_LICENSE_INFO +0 -1
  1242. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.se/ASSEMBLY_EXCEPTION +0 -1
  1243. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.se/LICENSE +0 -1
  1244. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.security.jgss/ADDITIONAL_LICENSE_INFO +0 -1
  1245. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.security.jgss/ASSEMBLY_EXCEPTION +0 -1
  1246. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.security.jgss/LICENSE +0 -1
  1247. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.security.sasl/ADDITIONAL_LICENSE_INFO +0 -1
  1248. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.security.sasl/ASSEMBLY_EXCEPTION +0 -1
  1249. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.security.sasl/LICENSE +0 -1
  1250. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.smartcardio/ADDITIONAL_LICENSE_INFO +0 -1
  1251. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.smartcardio/ASSEMBLY_EXCEPTION +0 -1
  1252. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.smartcardio/LICENSE +0 -1
  1253. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.sql/ADDITIONAL_LICENSE_INFO +0 -1
  1254. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.sql/ASSEMBLY_EXCEPTION +0 -1
  1255. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.sql/LICENSE +0 -1
  1256. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.sql.rowset/ADDITIONAL_LICENSE_INFO +0 -1
  1257. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.sql.rowset/ASSEMBLY_EXCEPTION +0 -1
  1258. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.sql.rowset/LICENSE +0 -1
  1259. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.transaction.xa/ADDITIONAL_LICENSE_INFO +0 -1
  1260. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.transaction.xa/ASSEMBLY_EXCEPTION +0 -1
  1261. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.transaction.xa/LICENSE +0 -1
  1262. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/ADDITIONAL_LICENSE_INFO +0 -1
  1263. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/ASSEMBLY_EXCEPTION +0 -1
  1264. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/LICENSE +0 -1
  1265. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml/xalan.md +0 -255
  1266. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml.crypto/ADDITIONAL_LICENSE_INFO +0 -1
  1267. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml.crypto/ASSEMBLY_EXCEPTION +0 -1
  1268. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/java.xml.crypto/LICENSE +0 -1
  1269. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.accessibility/ADDITIONAL_LICENSE_INFO +0 -1
  1270. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.accessibility/ASSEMBLY_EXCEPTION +0 -1
  1271. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.accessibility/LICENSE +0 -1
  1272. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.charsets/ADDITIONAL_LICENSE_INFO +0 -1
  1273. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.charsets/ASSEMBLY_EXCEPTION +0 -1
  1274. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.charsets/LICENSE +0 -1
  1275. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/ADDITIONAL_LICENSE_INFO +0 -1
  1276. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/ASSEMBLY_EXCEPTION +0 -1
  1277. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/LICENSE +0 -1
  1278. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.cryptoki/pkcs11cryptotoken.md +0 -72
  1279. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.ec/ADDITIONAL_LICENSE_INFO +0 -1
  1280. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.ec/ASSEMBLY_EXCEPTION +0 -1
  1281. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.crypto.ec/LICENSE +0 -1
  1282. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.dynalink/ADDITIONAL_LICENSE_INFO +0 -1
  1283. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.dynalink/ASSEMBLY_EXCEPTION +0 -1
  1284. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.dynalink/LICENSE +0 -1
  1285. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.httpserver/ADDITIONAL_LICENSE_INFO +0 -1
  1286. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.httpserver/ASSEMBLY_EXCEPTION +0 -1
  1287. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.httpserver/LICENSE +0 -1
  1288. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.incubator.vector/ADDITIONAL_LICENSE_INFO +0 -1
  1289. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.incubator.vector/ASSEMBLY_EXCEPTION +0 -1
  1290. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.incubator.vector/LICENSE +0 -1
  1291. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.ci/ADDITIONAL_LICENSE_INFO +0 -1
  1292. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.ci/ASSEMBLY_EXCEPTION +0 -1
  1293. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.ci/LICENSE +0 -1
  1294. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ADDITIONAL_LICENSE_INFO +0 -1
  1295. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/ASSEMBLY_EXCEPTION +0 -1
  1296. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler/LICENSE +0 -1
  1297. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ADDITIONAL_LICENSE_INFO +0 -1
  1298. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/ASSEMBLY_EXCEPTION +0 -1
  1299. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.internal.vm.compiler.management/LICENSE +0 -1
  1300. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jdwp.agent/ADDITIONAL_LICENSE_INFO +0 -1
  1301. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jdwp.agent/ASSEMBLY_EXCEPTION +0 -1
  1302. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jdwp.agent/LICENSE +0 -1
  1303. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jfr/ADDITIONAL_LICENSE_INFO +0 -1
  1304. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jfr/ASSEMBLY_EXCEPTION +0 -1
  1305. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jfr/LICENSE +0 -1
  1306. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jsobject/ADDITIONAL_LICENSE_INFO +0 -1
  1307. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jsobject/ASSEMBLY_EXCEPTION +0 -1
  1308. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.jsobject/LICENSE +0 -1
  1309. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.localedata/ADDITIONAL_LICENSE_INFO +0 -1
  1310. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.localedata/ASSEMBLY_EXCEPTION +0 -1
  1311. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.localedata/LICENSE +0 -1
  1312. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.localedata/cldr.md +0 -1
  1313. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management/ADDITIONAL_LICENSE_INFO +0 -1
  1314. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management/ASSEMBLY_EXCEPTION +0 -1
  1315. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management/LICENSE +0 -1
  1316. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management.agent/ADDITIONAL_LICENSE_INFO +0 -1
  1317. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management.agent/ASSEMBLY_EXCEPTION +0 -1
  1318. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management.agent/LICENSE +0 -1
  1319. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management.jfr/ADDITIONAL_LICENSE_INFO +0 -1
  1320. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management.jfr/ASSEMBLY_EXCEPTION +0 -1
  1321. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.management.jfr/LICENSE +0 -1
  1322. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.naming.dns/ADDITIONAL_LICENSE_INFO +0 -1
  1323. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.naming.dns/ASSEMBLY_EXCEPTION +0 -1
  1324. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.naming.dns/LICENSE +0 -1
  1325. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.naming.rmi/ADDITIONAL_LICENSE_INFO +0 -1
  1326. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.naming.rmi/ASSEMBLY_EXCEPTION +0 -1
  1327. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.naming.rmi/LICENSE +0 -1
  1328. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.net/ADDITIONAL_LICENSE_INFO +0 -1
  1329. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.net/ASSEMBLY_EXCEPTION +0 -1
  1330. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.net/LICENSE +0 -1
  1331. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.nio.mapmode/ADDITIONAL_LICENSE_INFO +0 -1
  1332. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.nio.mapmode/ASSEMBLY_EXCEPTION +0 -1
  1333. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.nio.mapmode/LICENSE +0 -1
  1334. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.sctp/ADDITIONAL_LICENSE_INFO +0 -1
  1335. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.sctp/ASSEMBLY_EXCEPTION +0 -1
  1336. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.sctp/LICENSE +0 -1
  1337. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.security.auth/ADDITIONAL_LICENSE_INFO +0 -1
  1338. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.security.auth/ASSEMBLY_EXCEPTION +0 -1
  1339. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.security.auth/LICENSE +0 -1
  1340. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.security.jgss/ADDITIONAL_LICENSE_INFO +0 -1
  1341. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.security.jgss/ASSEMBLY_EXCEPTION +0 -1
  1342. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.security.jgss/LICENSE +0 -1
  1343. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.unsupported/ADDITIONAL_LICENSE_INFO +0 -1
  1344. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.unsupported/ASSEMBLY_EXCEPTION +0 -1
  1345. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.unsupported/LICENSE +0 -1
  1346. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.unsupported.desktop/ADDITIONAL_LICENSE_INFO +0 -1
  1347. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.unsupported.desktop/ASSEMBLY_EXCEPTION +0 -1
  1348. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.unsupported.desktop/LICENSE +0 -1
  1349. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.xml.dom/ADDITIONAL_LICENSE_INFO +0 -1
  1350. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.xml.dom/ASSEMBLY_EXCEPTION +0 -1
  1351. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.xml.dom/LICENSE +0 -1
  1352. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.zipfs/ADDITIONAL_LICENSE_INFO +0 -1
  1353. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.zipfs/ASSEMBLY_EXCEPTION +0 -1
  1354. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/legal/jdk.zipfs/LICENSE +0 -1
  1355. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/classlist +0 -1510
  1356. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jawt.lib +0 -0
  1357. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jfr/default.jfc +0 -1126
  1358. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jfr/profile.jfc +0 -1126
  1359. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jrt-fs.jar +0 -0
  1360. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/jvm.lib +0 -0
  1361. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/modules +0 -0
  1362. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/psfontj2d.properties +0 -323
  1363. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/security/blocked.certs +0 -39
  1364. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/security/default.policy +0 -251
  1365. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/security/public_suffix_list.dat +0 -0
  1366. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/tzdb.dat +0 -0
  1367. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/lib/tzmappings +0 -506
  1368. quarchpy/connection_specific/jdk_j21_jres/win_amd64_jdk_21_jre/release +0 -2
  1369. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-311.pyc +0 -0
  1370. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-312.pyc +0 -0
  1371. quarchpy/connection_specific/serial/__pycache__/__init__.cpython-313.pyc +0 -0
  1372. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-311.pyc +0 -0
  1373. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-312.pyc +0 -0
  1374. quarchpy/connection_specific/serial/__pycache__/serialutil.cpython-313.pyc +0 -0
  1375. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-311.pyc +0 -0
  1376. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-312.pyc +0 -0
  1377. quarchpy/connection_specific/serial/__pycache__/serialwin32.cpython-313.pyc +0 -0
  1378. quarchpy/connection_specific/serial/__pycache__/win32.cpython-311.pyc +0 -0
  1379. quarchpy/connection_specific/serial/__pycache__/win32.cpython-312.pyc +0 -0
  1380. quarchpy/connection_specific/serial/__pycache__/win32.cpython-313.pyc +0 -0
  1381. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-311.pyc +0 -0
  1382. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-312.pyc +0 -0
  1383. quarchpy/connection_specific/serial/tools/__pycache__/__init__.cpython-313.pyc +0 -0
  1384. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-311.pyc +0 -0
  1385. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-312.pyc +0 -0
  1386. quarchpy/connection_specific/serial/tools/__pycache__/list_ports.cpython-313.pyc +0 -0
  1387. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-311.pyc +0 -0
  1388. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-312.pyc +0 -0
  1389. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_common.cpython-313.pyc +0 -0
  1390. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-311.pyc +0 -0
  1391. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-312.pyc +0 -0
  1392. quarchpy/connection_specific/serial/tools/__pycache__/list_ports_windows.cpython-313.pyc +0 -0
  1393. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-311.pyc +0 -0
  1394. quarchpy/connection_specific/usb_libs/__pycache__/libusb1.cpython-312.pyc +0 -0
  1395. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-311.pyc +0 -0
  1396. quarchpy/connection_specific/usb_libs/__pycache__/usb1.cpython-312.pyc +0 -0
  1397. quarchpy/debug/__pycache__/SystemTest.cpython-311.pyc +0 -0
  1398. quarchpy/debug/__pycache__/SystemTest.cpython-312.pyc +0 -0
  1399. quarchpy/debug/__pycache__/SystemTest.cpython-313.pyc +0 -0
  1400. quarchpy/debug/__pycache__/__init__.cpython-311.pyc +0 -0
  1401. quarchpy/debug/__pycache__/__init__.cpython-312.pyc +0 -0
  1402. quarchpy/debug/__pycache__/__init__.cpython-313.pyc +0 -0
  1403. quarchpy/debug/__pycache__/module_debug.cpython-311.pyc +0 -0
  1404. quarchpy/debug/__pycache__/module_debug.cpython-312.pyc +0 -0
  1405. quarchpy/debug/__pycache__/module_debug.cpython-313.pyc +0 -0
  1406. quarchpy/debug/__pycache__/simple_terminal.cpython-311.pyc +0 -0
  1407. quarchpy/debug/__pycache__/simple_terminal.cpython-312.pyc +0 -0
  1408. quarchpy/debug/__pycache__/simple_terminal.cpython-313.pyc +0 -0
  1409. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-311.pyc +0 -0
  1410. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-312.pyc +0 -0
  1411. quarchpy/debug/__pycache__/upgrade_quarchpy.cpython-313.pyc +0 -0
  1412. quarchpy/debug/__pycache__/versionCompare.cpython-311.pyc +0 -0
  1413. quarchpy/debug/__pycache__/versionCompare.cpython-312.pyc +0 -0
  1414. quarchpy/debug/__pycache__/versionCompare.cpython-313.pyc +0 -0
  1415. quarchpy/device/__pycache__/__init__.cpython-311.pyc +0 -0
  1416. quarchpy/device/__pycache__/__init__.cpython-312.pyc +0 -0
  1417. quarchpy/device/__pycache__/__init__.cpython-313.pyc +0 -0
  1418. quarchpy/device/__pycache__/device.cpython-311.pyc +0 -0
  1419. quarchpy/device/__pycache__/device.cpython-312.pyc +0 -0
  1420. quarchpy/device/__pycache__/device.cpython-313.pyc +0 -0
  1421. quarchpy/device/__pycache__/quarchArray.cpython-311.pyc +0 -0
  1422. quarchpy/device/__pycache__/quarchArray.cpython-312.pyc +0 -0
  1423. quarchpy/device/__pycache__/quarchArray.cpython-313.pyc +0 -0
  1424. quarchpy/device/__pycache__/quarchPPM.cpython-311.pyc +0 -0
  1425. quarchpy/device/__pycache__/quarchPPM.cpython-312.pyc +0 -0
  1426. quarchpy/device/__pycache__/quarchPPM.cpython-313.pyc +0 -0
  1427. quarchpy/device/__pycache__/quarchQPS.cpython-311.pyc +0 -0
  1428. quarchpy/device/__pycache__/quarchQPS.cpython-312.pyc +0 -0
  1429. quarchpy/device/__pycache__/quarchQPS.cpython-313.pyc +0 -0
  1430. quarchpy/device/__pycache__/scanDevices.cpython-311.pyc +0 -0
  1431. quarchpy/device/__pycache__/scanDevices.cpython-312.pyc +0 -0
  1432. quarchpy/device/__pycache__/scanDevices.cpython-313.pyc +0 -0
  1433. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-311.pyc +0 -0
  1434. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-312.pyc +0 -0
  1435. quarchpy/disk_test/__pycache__/AbsDiskFinder.cpython-313.pyc +0 -0
  1436. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-311.pyc +0 -0
  1437. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-312.pyc +0 -0
  1438. quarchpy/disk_test/__pycache__/DiskTargetSelection.cpython-313.pyc +0 -0
  1439. quarchpy/disk_test/__pycache__/__init__.cpython-311.pyc +0 -0
  1440. quarchpy/disk_test/__pycache__/__init__.cpython-312.pyc +0 -0
  1441. quarchpy/disk_test/__pycache__/__init__.cpython-313.pyc +0 -0
  1442. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-311.pyc +0 -0
  1443. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-312.pyc +0 -0
  1444. quarchpy/disk_test/__pycache__/iometerDiskFinder.cpython-313.pyc +0 -0
  1445. quarchpy/fio/__pycache__/FIO_interface.cpython-311.pyc +0 -0
  1446. quarchpy/fio/__pycache__/FIO_interface.cpython-312.pyc +0 -0
  1447. quarchpy/fio/__pycache__/FIO_interface.cpython-313.pyc +0 -0
  1448. quarchpy/fio/__pycache__/__init__.cpython-311.pyc +0 -0
  1449. quarchpy/fio/__pycache__/__init__.cpython-312.pyc +0 -0
  1450. quarchpy/fio/__pycache__/__init__.cpython-313.pyc +0 -0
  1451. quarchpy/fio/test_performance_class.py +0 -533
  1452. quarchpy/iometer/__pycache__/__init__.cpython-311.pyc +0 -0
  1453. quarchpy/iometer/__pycache__/__init__.cpython-312.pyc +0 -0
  1454. quarchpy/iometer/__pycache__/__init__.cpython-313.pyc +0 -0
  1455. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-311.pyc +0 -0
  1456. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-312.pyc +0 -0
  1457. quarchpy/iometer/__pycache__/gen_iometer_template.cpython-313.pyc +0 -0
  1458. quarchpy/iometer/__pycache__/iometerFuncs.cpython-311.pyc +0 -0
  1459. quarchpy/iometer/__pycache__/iometerFuncs.cpython-312.pyc +0 -0
  1460. quarchpy/iometer/__pycache__/iometerFuncs.cpython-313.pyc +0 -0
  1461. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-311.pyc +0 -0
  1462. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-312.pyc +0 -0
  1463. quarchpy/qis/__pycache__/StreamHeaderInfo.cpython-313.pyc +0 -0
  1464. quarchpy/qis/__pycache__/__init__.cpython-311.pyc +0 -0
  1465. quarchpy/qis/__pycache__/__init__.cpython-312.pyc +0 -0
  1466. quarchpy/qis/__pycache__/__init__.cpython-313.pyc +0 -0
  1467. quarchpy/qis/__pycache__/qisFuncs.cpython-311.pyc +0 -0
  1468. quarchpy/qis/__pycache__/qisFuncs.cpython-312.pyc +0 -0
  1469. quarchpy/qis/__pycache__/qisFuncs.cpython-313.pyc +0 -0
  1470. quarchpy/qps/__pycache__/__init__.cpython-311.pyc +0 -0
  1471. quarchpy/qps/__pycache__/__init__.cpython-312.pyc +0 -0
  1472. quarchpy/qps/__pycache__/__init__.cpython-313.pyc +0 -0
  1473. quarchpy/qps/__pycache__/qpsFuncs.cpython-311.pyc +0 -0
  1474. quarchpy/qps/__pycache__/qpsFuncs.cpython-312.pyc +0 -0
  1475. quarchpy/qps/__pycache__/qpsFuncs.cpython-313.pyc +0 -0
  1476. quarchpy/user_interface/__pycache__/__init__.cpython-311.pyc +0 -0
  1477. quarchpy/user_interface/__pycache__/__init__.cpython-312.pyc +0 -0
  1478. quarchpy/user_interface/__pycache__/__init__.cpython-313.pyc +0 -0
  1479. quarchpy/user_interface/__pycache__/user_interface.cpython-311.pyc +0 -0
  1480. quarchpy/user_interface/__pycache__/user_interface.cpython-312.pyc +0 -0
  1481. quarchpy/user_interface/__pycache__/user_interface.cpython-313.pyc +0 -0
  1482. quarchpy/utilities/__pycache__/TestCenter.cpython-311.pyc +0 -0
  1483. quarchpy/utilities/__pycache__/TestCenter.cpython-312.pyc +0 -0
  1484. quarchpy/utilities/__pycache__/TestCenter.cpython-313.pyc +0 -0
  1485. quarchpy/utilities/__pycache__/TimeValue.cpython-311.pyc +0 -0
  1486. quarchpy/utilities/__pycache__/TimeValue.cpython-312.pyc +0 -0
  1487. quarchpy/utilities/__pycache__/TimeValue.cpython-313.pyc +0 -0
  1488. quarchpy/utilities/__pycache__/Version.cpython-311.pyc +0 -0
  1489. quarchpy/utilities/__pycache__/Version.cpython-312.pyc +0 -0
  1490. quarchpy/utilities/__pycache__/Version.cpython-313.pyc +0 -0
  1491. quarchpy/utilities/__pycache__/__init__.cpython-311.pyc +0 -0
  1492. quarchpy/utilities/__pycache__/__init__.cpython-312.pyc +0 -0
  1493. quarchpy/utilities/__pycache__/__init__.cpython-313.pyc +0 -0
  1494. quarchpy-2.2.9.dev4.dist-info/METADATA +0 -466
  1495. quarchpy-2.2.9.dev4.dist-info/RECORD +0 -1754
  1496. quarchpy-2.2.9.dev4.dist-info/WHEEL +0 -6
  1497. /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL1995-02.xml → QTL1995-02.XML} +0 -0
  1498. /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL1999-02.xml → QTL1999-02.XML} +0 -0
  1499. /quarchpy/connection_specific/QPS/win-amd64/DeviceConfig/{QTL2312-01.xml → QTL2312-01.XML} +0 -0
  1500. /quarchpy/connection_specific/{jdk_j21_jres → jdk_jres}/__init__.py +0 -0
  1501. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/management/jmxremote.access +0 -0
  1502. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/management/jmxremote.password.template +0 -0
  1503. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/sdp/sdp.conf.template +0 -0
  1504. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/security/policy/README.txt +0 -0
  1505. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/security/policy/limited/default_US_export.policy +0 -0
  1506. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/security/policy/limited/default_local.policy +0 -0
  1507. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/security/policy/limited/exempt_local.policy +0 -0
  1508. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/security/policy/unlimited/default_US_export.policy +0 -0
  1509. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/security/policy/unlimited/default_local.policy +0 -0
  1510. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/conf/sound.properties +0 -0
  1511. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.base/ADDITIONAL_LICENSE_INFO +0 -0
  1512. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.base/ASSEMBLY_EXCEPTION +0 -0
  1513. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.base/LICENSE +0 -0
  1514. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.base/aes.md +0 -0
  1515. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.base/c-libutl.md +0 -0
  1516. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.base/siphash.md +0 -0
  1517. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.compiler/ADDITIONAL_LICENSE_INFO +0 -0
  1518. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.compiler/ASSEMBLY_EXCEPTION +0 -0
  1519. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.compiler/LICENSE +0 -0
  1520. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.datatransfer/ADDITIONAL_LICENSE_INFO +0 -0
  1521. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.datatransfer/ASSEMBLY_EXCEPTION +0 -0
  1522. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.datatransfer/LICENSE +0 -0
  1523. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/ADDITIONAL_LICENSE_INFO +0 -0
  1524. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/ASSEMBLY_EXCEPTION +0 -0
  1525. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/LICENSE +0 -0
  1526. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/colorimaging.md +0 -0
  1527. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/harfbuzz.md +0 -0
  1528. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/jpeg.md +0 -0
  1529. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/lcms.md +0 -0
  1530. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/libpng.md +0 -0
  1531. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/mesa3d.md +0 -0
  1532. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/pipewire.md +0 -0
  1533. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.desktop/xwd.md +0 -0
  1534. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.instrument/ADDITIONAL_LICENSE_INFO +0 -0
  1535. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.instrument/ASSEMBLY_EXCEPTION +0 -0
  1536. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.instrument/LICENSE +0 -0
  1537. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.logging/ADDITIONAL_LICENSE_INFO +0 -0
  1538. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.logging/ASSEMBLY_EXCEPTION +0 -0
  1539. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.logging/LICENSE +0 -0
  1540. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.management/ADDITIONAL_LICENSE_INFO +0 -0
  1541. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.management/ASSEMBLY_EXCEPTION +0 -0
  1542. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.management/LICENSE +0 -0
  1543. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.management.rmi/ADDITIONAL_LICENSE_INFO +0 -0
  1544. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.management.rmi/ASSEMBLY_EXCEPTION +0 -0
  1545. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.management.rmi/LICENSE +0 -0
  1546. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.naming/ADDITIONAL_LICENSE_INFO +0 -0
  1547. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.naming/ASSEMBLY_EXCEPTION +0 -0
  1548. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.naming/LICENSE +0 -0
  1549. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.net.http/ADDITIONAL_LICENSE_INFO +0 -0
  1550. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.net.http/ASSEMBLY_EXCEPTION +0 -0
  1551. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.net.http/LICENSE +0 -0
  1552. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.prefs/ADDITIONAL_LICENSE_INFO +0 -0
  1553. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.prefs/ASSEMBLY_EXCEPTION +0 -0
  1554. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.prefs/LICENSE +0 -0
  1555. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.rmi/ADDITIONAL_LICENSE_INFO +0 -0
  1556. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.rmi/ASSEMBLY_EXCEPTION +0 -0
  1557. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.rmi/LICENSE +0 -0
  1558. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.scripting/ADDITIONAL_LICENSE_INFO +0 -0
  1559. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.scripting/ASSEMBLY_EXCEPTION +0 -0
  1560. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.scripting/LICENSE +0 -0
  1561. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.se/ADDITIONAL_LICENSE_INFO +0 -0
  1562. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.se/ASSEMBLY_EXCEPTION +0 -0
  1563. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.se/LICENSE +0 -0
  1564. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.security.jgss/ADDITIONAL_LICENSE_INFO +0 -0
  1565. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.security.jgss/ASSEMBLY_EXCEPTION +0 -0
  1566. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.security.jgss/LICENSE +0 -0
  1567. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.security.sasl/ADDITIONAL_LICENSE_INFO +0 -0
  1568. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.security.sasl/ASSEMBLY_EXCEPTION +0 -0
  1569. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.security.sasl/LICENSE +0 -0
  1570. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.smartcardio/ADDITIONAL_LICENSE_INFO +0 -0
  1571. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.smartcardio/ASSEMBLY_EXCEPTION +0 -0
  1572. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.smartcardio/LICENSE +0 -0
  1573. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.sql/ADDITIONAL_LICENSE_INFO +0 -0
  1574. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.sql/ASSEMBLY_EXCEPTION +0 -0
  1575. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.sql/LICENSE +0 -0
  1576. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.sql.rowset/ADDITIONAL_LICENSE_INFO +0 -0
  1577. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.sql.rowset/ASSEMBLY_EXCEPTION +0 -0
  1578. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.sql.rowset/LICENSE +0 -0
  1579. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.transaction.xa/ADDITIONAL_LICENSE_INFO +0 -0
  1580. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.transaction.xa/ASSEMBLY_EXCEPTION +0 -0
  1581. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.transaction.xa/LICENSE +0 -0
  1582. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/ADDITIONAL_LICENSE_INFO +0 -0
  1583. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/ASSEMBLY_EXCEPTION +0 -0
  1584. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/LICENSE +0 -0
  1585. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/bcel.md +0 -0
  1586. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/dom.md +0 -0
  1587. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/jcup.md +0 -0
  1588. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml/xerces.md +0 -0
  1589. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml.crypto/ADDITIONAL_LICENSE_INFO +0 -0
  1590. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml.crypto/ASSEMBLY_EXCEPTION +0 -0
  1591. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml.crypto/LICENSE +0 -0
  1592. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/java.xml.crypto/santuario.md +0 -0
  1593. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.accessibility/ADDITIONAL_LICENSE_INFO +0 -0
  1594. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.accessibility/ASSEMBLY_EXCEPTION +0 -0
  1595. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.accessibility/LICENSE +0 -0
  1596. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.charsets/ADDITIONAL_LICENSE_INFO +0 -0
  1597. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.charsets/ASSEMBLY_EXCEPTION +0 -0
  1598. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.charsets/LICENSE +0 -0
  1599. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/ADDITIONAL_LICENSE_INFO +0 -0
  1600. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/ASSEMBLY_EXCEPTION +0 -0
  1601. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/LICENSE +0 -0
  1602. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/pkcs11wrapper.md +0 -0
  1603. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.ec/ADDITIONAL_LICENSE_INFO +0 -0
  1604. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.ec/ASSEMBLY_EXCEPTION +0 -0
  1605. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.crypto.ec/LICENSE +0 -0
  1606. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.dynalink/ADDITIONAL_LICENSE_INFO +0 -0
  1607. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.dynalink/ASSEMBLY_EXCEPTION +0 -0
  1608. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.dynalink/LICENSE +0 -0
  1609. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.dynalink/dynalink.md +0 -0
  1610. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.httpserver/ADDITIONAL_LICENSE_INFO +0 -0
  1611. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.httpserver/ASSEMBLY_EXCEPTION +0 -0
  1612. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.httpserver/LICENSE +0 -0
  1613. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.incubator.vector/ADDITIONAL_LICENSE_INFO +0 -0
  1614. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.incubator.vector/ASSEMBLY_EXCEPTION +0 -0
  1615. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.incubator.vector/LICENSE +0 -0
  1616. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.internal.vm.ci/ADDITIONAL_LICENSE_INFO +0 -0
  1617. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.internal.vm.ci/ASSEMBLY_EXCEPTION +0 -0
  1618. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.internal.vm.ci/LICENSE +0 -0
  1619. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jdwp.agent/ADDITIONAL_LICENSE_INFO +0 -0
  1620. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jdwp.agent/ASSEMBLY_EXCEPTION +0 -0
  1621. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jdwp.agent/LICENSE +0 -0
  1622. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jfr/ADDITIONAL_LICENSE_INFO +0 -0
  1623. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jfr/ASSEMBLY_EXCEPTION +0 -0
  1624. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jfr/LICENSE +0 -0
  1625. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jsobject/ADDITIONAL_LICENSE_INFO +0 -0
  1626. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jsobject/ASSEMBLY_EXCEPTION +0 -0
  1627. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.jsobject/LICENSE +0 -0
  1628. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.localedata/ADDITIONAL_LICENSE_INFO +0 -0
  1629. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.localedata/ASSEMBLY_EXCEPTION +0 -0
  1630. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.localedata/LICENSE +0 -0
  1631. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.localedata/thaidict.md +0 -0
  1632. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management/ADDITIONAL_LICENSE_INFO +0 -0
  1633. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management/ASSEMBLY_EXCEPTION +0 -0
  1634. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management/LICENSE +0 -0
  1635. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management.agent/ADDITIONAL_LICENSE_INFO +0 -0
  1636. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management.agent/ASSEMBLY_EXCEPTION +0 -0
  1637. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management.agent/LICENSE +0 -0
  1638. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management.jfr/ADDITIONAL_LICENSE_INFO +0 -0
  1639. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management.jfr/ASSEMBLY_EXCEPTION +0 -0
  1640. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.management.jfr/LICENSE +0 -0
  1641. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.naming.dns/ADDITIONAL_LICENSE_INFO +0 -0
  1642. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.naming.dns/ASSEMBLY_EXCEPTION +0 -0
  1643. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.naming.dns/LICENSE +0 -0
  1644. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.naming.rmi/ADDITIONAL_LICENSE_INFO +0 -0
  1645. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.naming.rmi/ASSEMBLY_EXCEPTION +0 -0
  1646. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.naming.rmi/LICENSE +0 -0
  1647. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.net/ADDITIONAL_LICENSE_INFO +0 -0
  1648. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.net/ASSEMBLY_EXCEPTION +0 -0
  1649. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.net/LICENSE +0 -0
  1650. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.nio.mapmode/ADDITIONAL_LICENSE_INFO +0 -0
  1651. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.nio.mapmode/ASSEMBLY_EXCEPTION +0 -0
  1652. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.nio.mapmode/LICENSE +0 -0
  1653. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.sctp/ADDITIONAL_LICENSE_INFO +0 -0
  1654. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.sctp/ASSEMBLY_EXCEPTION +0 -0
  1655. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.sctp/LICENSE +0 -0
  1656. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.security.auth/ADDITIONAL_LICENSE_INFO +0 -0
  1657. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.security.auth/ASSEMBLY_EXCEPTION +0 -0
  1658. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.security.auth/LICENSE +0 -0
  1659. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.security.jgss/ADDITIONAL_LICENSE_INFO +0 -0
  1660. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.security.jgss/ASSEMBLY_EXCEPTION +0 -0
  1661. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.security.jgss/LICENSE +0 -0
  1662. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.unsupported/ADDITIONAL_LICENSE_INFO +0 -0
  1663. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.unsupported/ASSEMBLY_EXCEPTION +0 -0
  1664. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.unsupported/LICENSE +0 -0
  1665. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.unsupported.desktop/ADDITIONAL_LICENSE_INFO +0 -0
  1666. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.unsupported.desktop/ASSEMBLY_EXCEPTION +0 -0
  1667. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.unsupported.desktop/LICENSE +0 -0
  1668. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.xml.dom/ADDITIONAL_LICENSE_INFO +0 -0
  1669. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.xml.dom/ASSEMBLY_EXCEPTION +0 -0
  1670. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.xml.dom/LICENSE +0 -0
  1671. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.zipfs/ADDITIONAL_LICENSE_INFO +0 -0
  1672. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.zipfs/ASSEMBLY_EXCEPTION +0 -0
  1673. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/legal/jdk.zipfs/LICENSE +0 -0
  1674. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/lib/jvm.cfg +0 -0
  1675. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/lib/psfont.properties.ja +0 -0
  1676. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/lib/security/blocked.certs +0 -0
  1677. /quarchpy/connection_specific/{jdk_j21_jres/lin_amd64_jdk_21_jre → jdk_jres/lin_amd64_jdk_jre}/lib/security/cacerts +0 -0
  1678. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/management/jmxremote.access +0 -0
  1679. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/management/jmxremote.password.template +0 -0
  1680. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/security/policy/README.txt +0 -0
  1681. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/security/policy/limited/default_US_export.policy +0 -0
  1682. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/security/policy/limited/default_local.policy +0 -0
  1683. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/security/policy/limited/exempt_local.policy +0 -0
  1684. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/security/policy/unlimited/default_US_export.policy +0 -0
  1685. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/security/policy/unlimited/default_local.policy +0 -0
  1686. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/conf/sound.properties +0 -0
  1687. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.base/ADDITIONAL_LICENSE_INFO +0 -0
  1688. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.base/ASSEMBLY_EXCEPTION +0 -0
  1689. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.base/LICENSE +0 -0
  1690. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.base/aes.md +0 -0
  1691. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.base/c-libutl.md +0 -0
  1692. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.base/siphash.md +0 -0
  1693. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.compiler/ADDITIONAL_LICENSE_INFO +0 -0
  1694. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.compiler/ASSEMBLY_EXCEPTION +0 -0
  1695. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.compiler/LICENSE +0 -0
  1696. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.datatransfer/ADDITIONAL_LICENSE_INFO +0 -0
  1697. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.datatransfer/ASSEMBLY_EXCEPTION +0 -0
  1698. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.datatransfer/LICENSE +0 -0
  1699. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/ADDITIONAL_LICENSE_INFO +0 -0
  1700. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/ASSEMBLY_EXCEPTION +0 -0
  1701. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/LICENSE +0 -0
  1702. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/colorimaging.md +0 -0
  1703. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/harfbuzz.md +0 -0
  1704. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/jpeg.md +0 -0
  1705. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/lcms.md +0 -0
  1706. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/libpng.md +0 -0
  1707. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/mesa3d.md +0 -0
  1708. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/pipewire.md +0 -0
  1709. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.desktop/xwd.md +0 -0
  1710. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.instrument/ADDITIONAL_LICENSE_INFO +0 -0
  1711. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.instrument/ASSEMBLY_EXCEPTION +0 -0
  1712. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.instrument/LICENSE +0 -0
  1713. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.logging/ADDITIONAL_LICENSE_INFO +0 -0
  1714. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.logging/ASSEMBLY_EXCEPTION +0 -0
  1715. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.logging/LICENSE +0 -0
  1716. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.management/ADDITIONAL_LICENSE_INFO +0 -0
  1717. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.management/ASSEMBLY_EXCEPTION +0 -0
  1718. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.management/LICENSE +0 -0
  1719. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.management.rmi/ADDITIONAL_LICENSE_INFO +0 -0
  1720. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.management.rmi/ASSEMBLY_EXCEPTION +0 -0
  1721. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.management.rmi/LICENSE +0 -0
  1722. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.naming/ADDITIONAL_LICENSE_INFO +0 -0
  1723. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.naming/ASSEMBLY_EXCEPTION +0 -0
  1724. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.naming/LICENSE +0 -0
  1725. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.net.http/ADDITIONAL_LICENSE_INFO +0 -0
  1726. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.net.http/ASSEMBLY_EXCEPTION +0 -0
  1727. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.net.http/LICENSE +0 -0
  1728. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.prefs/ADDITIONAL_LICENSE_INFO +0 -0
  1729. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.prefs/ASSEMBLY_EXCEPTION +0 -0
  1730. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.prefs/LICENSE +0 -0
  1731. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.rmi/ADDITIONAL_LICENSE_INFO +0 -0
  1732. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.rmi/ASSEMBLY_EXCEPTION +0 -0
  1733. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.rmi/LICENSE +0 -0
  1734. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.scripting/ADDITIONAL_LICENSE_INFO +0 -0
  1735. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.scripting/ASSEMBLY_EXCEPTION +0 -0
  1736. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.scripting/LICENSE +0 -0
  1737. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.se/ADDITIONAL_LICENSE_INFO +0 -0
  1738. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.se/ASSEMBLY_EXCEPTION +0 -0
  1739. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.se/LICENSE +0 -0
  1740. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.security.jgss/ADDITIONAL_LICENSE_INFO +0 -0
  1741. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.security.jgss/ASSEMBLY_EXCEPTION +0 -0
  1742. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.security.jgss/LICENSE +0 -0
  1743. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.security.sasl/ADDITIONAL_LICENSE_INFO +0 -0
  1744. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.security.sasl/ASSEMBLY_EXCEPTION +0 -0
  1745. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.security.sasl/LICENSE +0 -0
  1746. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.smartcardio/ADDITIONAL_LICENSE_INFO +0 -0
  1747. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.smartcardio/ASSEMBLY_EXCEPTION +0 -0
  1748. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.smartcardio/LICENSE +0 -0
  1749. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.sql/ADDITIONAL_LICENSE_INFO +0 -0
  1750. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.sql/ASSEMBLY_EXCEPTION +0 -0
  1751. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.sql/LICENSE +0 -0
  1752. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.sql.rowset/ADDITIONAL_LICENSE_INFO +0 -0
  1753. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.sql.rowset/ASSEMBLY_EXCEPTION +0 -0
  1754. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.sql.rowset/LICENSE +0 -0
  1755. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.transaction.xa/ADDITIONAL_LICENSE_INFO +0 -0
  1756. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.transaction.xa/ASSEMBLY_EXCEPTION +0 -0
  1757. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.transaction.xa/LICENSE +0 -0
  1758. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/ADDITIONAL_LICENSE_INFO +0 -0
  1759. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/ASSEMBLY_EXCEPTION +0 -0
  1760. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/LICENSE +0 -0
  1761. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/bcel.md +0 -0
  1762. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/dom.md +0 -0
  1763. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/jcup.md +0 -0
  1764. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml/xerces.md +0 -0
  1765. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml.crypto/ADDITIONAL_LICENSE_INFO +0 -0
  1766. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml.crypto/ASSEMBLY_EXCEPTION +0 -0
  1767. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml.crypto/LICENSE +0 -0
  1768. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/java.xml.crypto/santuario.md +0 -0
  1769. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.accessibility/ADDITIONAL_LICENSE_INFO +0 -0
  1770. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.accessibility/ASSEMBLY_EXCEPTION +0 -0
  1771. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.accessibility/LICENSE +0 -0
  1772. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.charsets/ADDITIONAL_LICENSE_INFO +0 -0
  1773. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.charsets/ASSEMBLY_EXCEPTION +0 -0
  1774. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.charsets/LICENSE +0 -0
  1775. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/ADDITIONAL_LICENSE_INFO +0 -0
  1776. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/ASSEMBLY_EXCEPTION +0 -0
  1777. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/LICENSE +0 -0
  1778. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/pkcs11wrapper.md +0 -0
  1779. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.ec/ADDITIONAL_LICENSE_INFO +0 -0
  1780. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.ec/ASSEMBLY_EXCEPTION +0 -0
  1781. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.crypto.ec/LICENSE +0 -0
  1782. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.dynalink/ADDITIONAL_LICENSE_INFO +0 -0
  1783. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.dynalink/ASSEMBLY_EXCEPTION +0 -0
  1784. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.dynalink/LICENSE +0 -0
  1785. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.dynalink/dynalink.md +0 -0
  1786. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.httpserver/ADDITIONAL_LICENSE_INFO +0 -0
  1787. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.httpserver/ASSEMBLY_EXCEPTION +0 -0
  1788. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.httpserver/LICENSE +0 -0
  1789. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.incubator.vector/ADDITIONAL_LICENSE_INFO +0 -0
  1790. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.incubator.vector/ASSEMBLY_EXCEPTION +0 -0
  1791. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.incubator.vector/LICENSE +0 -0
  1792. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.internal.vm.ci/ADDITIONAL_LICENSE_INFO +0 -0
  1793. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.internal.vm.ci/ASSEMBLY_EXCEPTION +0 -0
  1794. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.internal.vm.ci/LICENSE +0 -0
  1795. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jdwp.agent/ADDITIONAL_LICENSE_INFO +0 -0
  1796. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jdwp.agent/ASSEMBLY_EXCEPTION +0 -0
  1797. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jdwp.agent/LICENSE +0 -0
  1798. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jfr/ADDITIONAL_LICENSE_INFO +0 -0
  1799. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jfr/ASSEMBLY_EXCEPTION +0 -0
  1800. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jfr/LICENSE +0 -0
  1801. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jsobject/ADDITIONAL_LICENSE_INFO +0 -0
  1802. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jsobject/ASSEMBLY_EXCEPTION +0 -0
  1803. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.jsobject/LICENSE +0 -0
  1804. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.localedata/ADDITIONAL_LICENSE_INFO +0 -0
  1805. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.localedata/ASSEMBLY_EXCEPTION +0 -0
  1806. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.localedata/LICENSE +0 -0
  1807. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.localedata/thaidict.md +0 -0
  1808. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management/ADDITIONAL_LICENSE_INFO +0 -0
  1809. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management/ASSEMBLY_EXCEPTION +0 -0
  1810. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management/LICENSE +0 -0
  1811. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management.agent/ADDITIONAL_LICENSE_INFO +0 -0
  1812. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management.agent/ASSEMBLY_EXCEPTION +0 -0
  1813. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management.agent/LICENSE +0 -0
  1814. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management.jfr/ADDITIONAL_LICENSE_INFO +0 -0
  1815. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management.jfr/ASSEMBLY_EXCEPTION +0 -0
  1816. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.management.jfr/LICENSE +0 -0
  1817. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.naming.dns/ADDITIONAL_LICENSE_INFO +0 -0
  1818. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.naming.dns/ASSEMBLY_EXCEPTION +0 -0
  1819. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.naming.dns/LICENSE +0 -0
  1820. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.naming.rmi/ADDITIONAL_LICENSE_INFO +0 -0
  1821. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.naming.rmi/ASSEMBLY_EXCEPTION +0 -0
  1822. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.naming.rmi/LICENSE +0 -0
  1823. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.net/ADDITIONAL_LICENSE_INFO +0 -0
  1824. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.net/ASSEMBLY_EXCEPTION +0 -0
  1825. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.net/LICENSE +0 -0
  1826. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.nio.mapmode/ADDITIONAL_LICENSE_INFO +0 -0
  1827. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.nio.mapmode/ASSEMBLY_EXCEPTION +0 -0
  1828. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.nio.mapmode/LICENSE +0 -0
  1829. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.sctp/ADDITIONAL_LICENSE_INFO +0 -0
  1830. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.sctp/ASSEMBLY_EXCEPTION +0 -0
  1831. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.sctp/LICENSE +0 -0
  1832. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.security.auth/ADDITIONAL_LICENSE_INFO +0 -0
  1833. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.security.auth/ASSEMBLY_EXCEPTION +0 -0
  1834. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.security.auth/LICENSE +0 -0
  1835. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.security.jgss/ADDITIONAL_LICENSE_INFO +0 -0
  1836. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.security.jgss/ASSEMBLY_EXCEPTION +0 -0
  1837. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.security.jgss/LICENSE +0 -0
  1838. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.unsupported/ADDITIONAL_LICENSE_INFO +0 -0
  1839. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.unsupported/ASSEMBLY_EXCEPTION +0 -0
  1840. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.unsupported/LICENSE +0 -0
  1841. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.unsupported.desktop/ADDITIONAL_LICENSE_INFO +0 -0
  1842. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.unsupported.desktop/ASSEMBLY_EXCEPTION +0 -0
  1843. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.unsupported.desktop/LICENSE +0 -0
  1844. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.xml.dom/ADDITIONAL_LICENSE_INFO +0 -0
  1845. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.xml.dom/ASSEMBLY_EXCEPTION +0 -0
  1846. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.xml.dom/LICENSE +0 -0
  1847. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.zipfs/ADDITIONAL_LICENSE_INFO +0 -0
  1848. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.zipfs/ASSEMBLY_EXCEPTION +0 -0
  1849. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/legal/jdk.zipfs/LICENSE +0 -0
  1850. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/lib/fontconfig.bfc +0 -0
  1851. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/lib/fontconfig.properties.src +0 -0
  1852. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/lib/jvm.cfg +0 -0
  1853. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/lib/psfont.properties.ja +0 -0
  1854. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/lib/security/blocked.certs +0 -0
  1855. /quarchpy/connection_specific/{jdk_j21_jres/mac_amd64_jdk_21_jre → jdk_jres/mac_amd64_jdk_jre}/lib/security/cacerts +0 -0
  1856. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/management/jmxremote.access +0 -0
  1857. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/management/jmxremote.password.template +0 -0
  1858. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/security/policy/README.txt +0 -0
  1859. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/security/policy/limited/default_US_export.policy +0 -0
  1860. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/security/policy/limited/default_local.policy +0 -0
  1861. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/security/policy/limited/exempt_local.policy +0 -0
  1862. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/security/policy/unlimited/default_US_export.policy +0 -0
  1863. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/security/policy/unlimited/default_local.policy +0 -0
  1864. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/conf/sound.properties +0 -0
  1865. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/ADDITIONAL_LICENSE_INFO +0 -0
  1866. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/ASSEMBLY_EXCEPTION +0 -0
  1867. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/LICENSE +0 -0
  1868. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/aes.md +0 -0
  1869. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/c-libutl.md +0 -0
  1870. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/siphash.md +0 -0
  1871. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/wepoll.md +0 -0
  1872. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.base/zlib.md +0 -0
  1873. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.desktop/colorimaging.md +0 -0
  1874. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.desktop/harfbuzz.md +0 -0
  1875. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.desktop/jpeg.md +0 -0
  1876. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.desktop/lcms.md +0 -0
  1877. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.desktop/libpng.md +0 -0
  1878. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.desktop/mesa3d.md +0 -0
  1879. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.xml/bcel.md +0 -0
  1880. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.xml/dom.md +0 -0
  1881. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.xml/jcup.md +0 -0
  1882. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.xml/xerces.md +0 -0
  1883. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/java.xml.crypto/santuario.md +0 -0
  1884. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/jdk.crypto.cryptoki/pkcs11wrapper.md +0 -0
  1885. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/jdk.dynalink/dynalink.md +0 -0
  1886. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/legal/jdk.localedata/thaidict.md +0 -0
  1887. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/lib/fontconfig.bfc +0 -0
  1888. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/lib/fontconfig.properties.src +0 -0
  1889. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/lib/jvm.cfg +0 -0
  1890. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/lib/psfont.properties.ja +0 -0
  1891. /quarchpy/connection_specific/{jdk_j21_jres/win_amd64_jdk_21_jre → jdk_jres/win_amd64_jdk_jre}/lib/security/cacerts +0 -0
  1892. {quarchpy-2.2.9.dev4.dist-info → quarchpy-2.2.10.dist-info}/top_level.txt +0 -0
quarchpy/device/device.py CHANGED
@@ -1,561 +1,1366 @@
1
- import time, sys, os ,logging
2
-
3
- from quarchpy.connection import QISConnection, PYConnection, QPSConnection
1
+ from __future__ import annotations
2
+ from typing import Optional, Tuple, Any, Union # Added for type hinting in docstrings
3
+ import logging
4
+ import os
4
5
  import re
6
+ import sys
7
+ import time
5
8
 
6
- # Check Python version
9
+ from quarchpy.qps import isQpsRunning
10
+ from quarchpy.qis import isQisRunning
11
+
12
+ from quarchpy.connection import QISConnection, PYConnection, QPSConnection
13
+ # Check Python version and set timeout exception
7
14
  if sys.version_info.major == 2:
8
- # Python 2: Use socket.timeout
9
15
  try:
10
16
  import socket
17
+
11
18
  timeout_exception = socket.timeout
12
19
  except AttributeError as e:
13
20
  timeout_exception = None
14
- logging.error("Socket timeout is not available in this Python version. "+str(e))
21
+ logging.error(f"Socket timeout unavailable: {e}")
15
22
  else:
16
- # Python 3: Use built-in TimeoutError
17
- timeout_exception = TimeoutError
23
+ timeout_exception = TimeoutError # Python 3: Use built-in TimeoutError
18
24
 
25
+ # --- Main Device Class ---
19
26
  class quarchDevice:
20
27
  """
21
- Allows control over a Quarch device, over a wide range of underlying connection methods. This is the core class
22
- used for control of all Quarch products.
23
-
28
+ Allows control over a Quarch device, over a wide range of underlying
29
+ connection methods. This is the core class used for control of all
30
+ Quarch products.
31
+
32
+ Attributes:
33
+ ConString (str): The potentially modified connection string used.
34
+ ConType (str): The specified connection type ('PY', 'QIS', 'QPS').
35
+ timeout (int): The communication timeout in seconds.
36
+ connectionObj (Optional[QISConnection, QPSConnection, PYConnection]): The underlying connection
37
+ object (e.g., PYConnection, QISConnection instance). None if connection failed or is closed.
38
+ ConCommsType (Optional[str]): The actual communication type determined
39
+ by the connection object (e.g., 'USB', 'TCP'). Set for PY type.
40
+ connectionName (Optional[str]): The target identifier determined by the
41
+ connection object (e.g., 'QTL1234-01-001', '192.168.1.100'). Set for PY type.
42
+ connectionTypeName (Optional[str]): Alias for ConCommsType. Set for PY type.
24
43
  """
25
44
 
26
- def __init__(self, ConString, ConType="PY", timeout="5"):
27
- """
28
- Constructor for quarchDevice, allowing the connection method of the device to be specified.
29
-
30
- Parameters
31
- ----------
32
- ConString : str
33
-
34
- Connection string, specifying the underlying connection type and module identifier. The underlying
35
- connection must be supported both by the connection type and the target module.
36
-
37
- Example:
38
- USB:QTL1743 - USB connection with given part number
39
- USB:QTL1743-03-015 - USB connection with fully qualified serial number
40
- SERIAL:COM4 - Serial connection with COM port (ttyS0 for linux)
41
- TCP:192.168.1.55 - LAN(TCP) connection to IP address
42
- TELNET:QTL1079-03-004 - LAN(TELNET) connection to netBIOS name (must resolve to IP address)
43
- REST:192.168.1.60 - LAN(REST) connection to IP address
44
-
45
- ConType : {'PY', 'QIS', 'QPS'}
46
-
47
- Specifies the software type which runs the connection:
48
- PY - (Default) Connection is run via pure Python code
49
-
50
- QIS - Power modules only, connection run via QIS (Quarch Instrument Server) for easy power capture in raw formats.
51
- Serial is not supported. IP and port can be specified to connect to a QIS instance running at another location "QIS:192.168.1.100:9722"
52
-
53
- QPS - Power modules only, connection run via QPS (Quarch Power Studio) for automated power capture and analysis within thr QPS graphical environment.
54
- Serial is not supported. IP and port can be specified to connect to a QPS instance running at another location "QPS:192.168.1.100:9822"
55
-
56
- timeout : str, optional
57
-
58
- Timeout in seconds for the device to respond.
59
-
60
- """
61
-
45
+ def __init__(self, ConString: str, ConType: str = "PY", timeout: str = "5"):
46
+ """
47
+ Initializes the quarchDevice, establishes the connection.
48
+
49
+ Performs initial parameter validation, determines the connection type,
50
+ delegates to specific helper methods to create the underlying connection
51
+ object (PYConnection, QISConnection, or QPSConnection), and verifies
52
+ the connection.
53
+
54
+ Args:
55
+ ConString (str): The connection string (e.g., "USB:ID", "TCP:IP", "QIS:ID").
56
+ ConType (str, optional): The connection mode ('PY', 'QIS', 'QPS'). Defaults to "PY".
57
+ timeout (str, optional): Communication timeout in seconds. Defaults to "5".
58
+
59
+ Raises:
60
+ ValueError: If ConString format is invalid or timeout is not numeric.
61
+ ConnectionError: If establishing the connection fails.
62
+ TimeoutError: If verifying the device on QIS/QPS times out.
63
+ ImportError: If required underlying connection classes are missing.
64
+ """
65
+ # --- Initial setup and validation ---
66
+ # Initialize all instance attributes first
67
+ self.ConType = ""
68
+ self.ConString = ""
69
+ self.connectionTypeName = None
70
+ self.connectionName = None
71
+ self.ConCommsType = None
72
+ self.connectionObj = None
73
+ self.timeout = 5 # Default int timeout
74
+ self.is_module_resetting = False
75
+
76
+ # Call helper to store and validate parameters
77
+ self._store_and_validate_params(ConString, ConType, timeout)
78
+
79
+ logging.debug(f"Initializing quarchDevice with ConString='{self.ConString}', ConType='{self.ConType}', Timeout='{self.timeout}'")
80
+ con_type_upper = self.ConType.upper()
81
+
82
+ # --- Delegate to specific initialization method ---
83
+ if con_type_upper == "PY":
84
+ self._initialize_py_connection()
85
+ elif con_type_upper.startswith("QIS"):
86
+ self._initialize_qis_connection()
87
+ elif con_type_upper.startswith("QPS"):
88
+ self._initialize_qps_connection()
89
+ else:
90
+ # Invalid ConType should have been caught by check_module_format
91
+ raise ValueError(f"Invalid connection type '{self.ConType}'.")
92
+
93
+ # --- Final connection verification ---
94
+ self._verify_connection_object()
95
+ logging.info(f"Connection successful: Type='{self.ConType}', Target='{getattr(self.connectionObj, 'ConnTarget', 'Unknown')}'")
96
+
97
+ # --- Private Helper Methods ---
98
+
99
+ def _store_and_validate_params(self, ConString: str, ConType: str, timeout: str):
100
+ """
101
+ Stores initial parameters and performs basic validation.
102
+
103
+ Sets self.ConString (with lowercasing rule), self.ConType,
104
+ validates and sets self.timeout (as int), and calls
105
+ check_module_format to validate ConString format.
106
+
107
+ Args:
108
+ ConString (str): The raw connection string.
109
+ ConType (str): The raw connection type.
110
+ timeout (str): The raw timeout value.
111
+
112
+ Raises:
113
+ ValueError: If timeout is non-numeric or ConString format is invalid.
114
+ """
62
115
  self.ConString = ConString
116
+ # Lowercase unless serial
63
117
  if "serial" not in ConString.lower():
64
118
  self.ConString = ConString.lower()
65
- self.ConType = ConType
119
+ self.ConType = ConType
120
+ self.connectionObj = None # Ensure it's reset here
121
+ self.timeout = int(timeout)
66
122
 
67
- try:
68
- self.timeout = int(timeout)
69
- except:
70
- raise Exception("Invalid value for timeout, must be a numeric value")
123
+ # Use the globally defined check_module_format function
124
+ if not check_module_format(self.ConString):
125
+ raise ValueError(f"Module format is invalid for connection string: '{self.ConString}'")
71
126
 
72
- if checkModuleFormat(self.ConString) == False:
73
- raise Exception("Module format is invalid!")
127
+ def _initialize_py_connection(self):
128
+ """
129
+ Initializes the connection using the PY (Pure Python) method.
74
130
 
75
- # Initializes the object as a python or QIS connection
76
- ## Python
77
- if self.ConType.upper() == "PY":
131
+ Handles colon formatting, resolves target using get_connection_target if
132
+ applicable, creates the PYConnection object, stores connection details,
133
+ and verifies communication with a '*tst?' command.
78
134
 
79
- # replacing colons
80
- numb_colons = self.ConString.count(":")
81
- if numb_colons == 2:
82
- self.ConString = self.ConString.replace('::', ':')
135
+ Sets:
136
+ self.connectionObj, self.ConCommsType, self.connectionName,
137
+ self.connectionTypeName, self.ConString (potentially updated).
83
138
 
84
- if self.ConString.lower().find("qtl") != -1 and self.ConString.lower().find("usb") ==-1:
85
- from .scanDevices import get_connection_target
86
- self.ConString = get_connection_target(self.ConString)
139
+ Raises:
140
+ ConnectionError: If connection fails or device doesn't respond correctly.
141
+ ImportError: If PYConnection class is missing.
142
+ """
143
+ logging.debug("Attempting PY connection...")
144
+ # Handle potential double colons
145
+ numb_colons = self.ConString.count(":")
146
+ if numb_colons == 2:
147
+ logging.debug("Replacing '::' with ':' in ConString for PY connection.")
148
+ self.ConString = self.ConString.replace('::', ':')
149
+
150
+ # Resolve target if needed
151
+ self._resolve_py_target()
87
152
 
88
- # Create the connection object
153
+ # Create PYConnection object
154
+ try:
155
+ # Store PYConnection object
89
156
  self.connectionObj = PYConnection(self.ConString)
90
- self.ConCommsType = self.connectionObj.ConnTypeStr
157
+ # Store connection details from the object
158
+ self.ConCommsType = getattr(self.connectionObj, 'ConnTypeStr', None)
159
+ self.connectionName = getattr(self.connectionObj, 'ConnTarget', None)
160
+ self.connectionTypeName = self.ConCommsType # Alias
161
+ logging.debug(f"PY Connection details: Type='{self.connectionTypeName}', Target='{self.connectionName}'")
162
+ except Exception as e_pyconn:
163
+ logging.error(f"Failed to create PYConnection for '{self.ConString}': {e_pyconn}", exc_info=True)
164
+ raise ConnectionError(f"Failed to establish PY connection for '{self.ConString}'") from e_pyconn
165
+
166
+ # Verify communication with *tst?
167
+ self._test_py_connection()
168
+
169
+ def _resolve_py_target(self):
170
+ """
171
+ Attempts to resolve ConString target if needed for PY connections.
91
172
 
92
- # Exposes the connection type and module for later use.
93
- self.connectionName = self.connectionObj.ConnTarget
94
- self.connectionTypeName = self.connectionObj.ConnTypeStr
173
+ If the ConString looks like a QTL identifier (contains 'qtl') but is
174
+ not explicitly USB, it calls the external `get_connection_target`
175
+ function to find the best actual connection string (e.g., a specific
176
+ COM port or IP address) and updates `self.ConString` if found.
95
177
 
96
- time.sleep(0.1)
97
- item = None
98
- item = self.connectionObj.connection.sendCommand("*tst?")
99
- if "OK" in item:
100
- pass
101
- elif "FAIL" in item:
102
- pass
103
- elif item is not None:
104
- pass
178
+ Uses:
179
+ self.ConString
180
+ get_connection_target (imported function)
181
+
182
+ Modifies:
183
+ self.ConString (if target is resolved)
184
+ """
185
+ # Check conditions: contains 'qtl', not 'usb', and helper function exists
186
+ if "qtl" in self.ConString.lower() and "usb" not in self.ConString.lower():
187
+ from quarchpy.device import get_connection_target
188
+ if get_connection_target is not None:
189
+ try:
190
+ logging.debug(f"Attempting to resolve connection target for '{self.ConString}'...")
191
+ resolved_con_string = get_connection_target(self.ConString)
192
+ if resolved_con_string and "Fail" not in resolved_con_string: # Check for failure string
193
+ logging.debug(f"Resolved '{self.ConString}' to '{resolved_con_string}'")
194
+ self.ConString = resolved_con_string # Update if successful
195
+ else:
196
+ logging.warning(f"get_connection_target failed or returned empty for '{self.ConString}'. Using original.")
197
+ except Exception as e_scan:
198
+ # Log error but continue with original ConString
199
+ logging.error(f"Error calling get_connection_target: {e_scan}. Using original ConString.")
105
200
  else:
106
- raise Exception("No module responded to *tst? command!")
107
- time.sleep(0.1)
108
-
109
- ## QIS
110
- # ConType may be QIS only or QIS:ip:port [:3] checks if the first 3 letters are QIS.
111
- elif self.ConType[:3].upper() == "QIS":
112
- try: # If host and port are specified.
113
- QIS, host, port = self.ConType.split(':') # Extract QIS, host and port.
114
- port = int(port) # QIS port should be an int.
115
- except: # If host and port are not specified.
116
- host = '127.0.0.1'
117
- port = 9722
118
-
119
- numb_colons = self.ConString.count(":")
120
- if numb_colons == 1:
121
- self.ConString = self.ConString.replace(':', '::')
122
- # Creates the connection object.
123
- self.connectionObj = QISConnection(self.ConString, host, port)
201
+ # Log if resolution needed but helper unavailable
202
+ logging.warning("get_connection_target function not available, cannot resolve connection string.")
124
203
 
125
- list = self.connectionObj.qis.getDeviceList()
126
- list_str = "".join(list).lower()
127
-
128
- timeout = time.time() + int(timeout) # now + n seconds
129
- # check for device in list, has a timeout
130
- while time.time() < timeout: # look for the connection string in qis $list details
131
-
132
- # Check if it's a module's QTL number
133
- if "qtl" not in self.ConString.lower():
134
-
135
- # If not, check if it contains a valid IP address format
136
- ip_address = re.search(r"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}", self.ConString)
137
- if not ip_address:
138
- raise ValueError("ConString " + self.ConString + " does not contain a valid QTL number or IP address")
139
- # Attempt to get QTL number from qis "$list details"
140
- temp_str = _check_ip_in_qis_list(ip_address.group(), self.connectionObj.qis.get_list_details())
141
- if temp_str:
142
- # If found
143
- self.ConString = temp_str
144
- break
145
-
146
- logging.debug("Did not find ip address in list details, attempt targetted qis scan")
147
-
148
- # If it's not present in the list already, then try scanning for it via qis
149
- # Scan is purposefully after initial check! 09/03/2023
150
- # Valid response example "Located device: 192.168.1.3"
151
- if "located" in str(self.connectionObj.qis.scanIP(self.ConString)).lower():
152
- # Note - Qis takes a moment or 2 to add this newly located device to the $list 21/03/23
153
- timeout += 20 # Extend the timeout as the drive was located
154
- while time.time() < timeout:
155
- # try find the QTL from ipaddress
156
- temp_str = _check_ip_in_qis_list(ip_address.group(), self.connectionObj.qis.get_list_details())
157
- if temp_str:
158
- # If the item is found, break out of this loop
159
- self.ConString = temp_str
160
- break
161
- time.sleep(1) # Slow down the poll
162
- else:
163
- # if it's not found, continue and allow program to timeout
164
- continue
165
- # Break out of both loops
166
- break
167
-
168
- elif str(self.ConString).lower() in str(list_str).lower():
169
- # If we have QTL device, and it's in list, nothing more needs done.
170
- break
171
- else:
172
- time.sleep(1)
173
- list = self.connectionObj.qis.getDeviceList()
174
- list_str = "".join(list).lower()
175
- else: # If we didn't hit a 'break' condition in the above loop, then it timed out
176
- raise timeout_exception("Could not find module " + self.ConString + " from Qis within specified time")
204
+ def _test_py_connection(self):
205
+ """
206
+ Sends '*tst?' command to verify communication for PY connections.
177
207
 
178
- self.connectionObj.qis.sendAndReceiveCmd(cmd="$default " + self.ConString)
208
+ Checks if the response contains "OK" or "FAIL".
209
+ Closes connection and raises ConnectionError
210
+ if the test fails or times out.
179
211
 
180
- ## QPS
181
- elif self.ConType[:3].upper() == "QPS":
212
+ Raises:
213
+ ConnectionError: If the command fails or the response is invalid.
214
+ """
215
+ try:
216
+ # Use snake_case internally
217
+ item = self.send_command("*tst?")
218
+ except Exception as e_tst:
219
+ logging.warning(f"Error sending *tst? during init: {e_tst}")
220
+ # Raise a more specific error indicating communication failure
221
+ raise ConnectionError("Module failed to respond to *tst? command during initialization.") from e_tst
222
+
223
+ # Check if response indicates basic communication success
224
+ response_ok = item is not None and ("OK" in item or "FAIL" in item)
225
+ if not response_ok:
226
+ logging.error(f"No valid module response to *tst? command! Received: '{item}'")
182
227
  try:
183
- # Extract QPS, host and port.
184
- QPS, host, port = self.ConType.split(':')
185
- # QPS port should be an int.
186
- port = int(port)
187
- # If host and port are not specified.
188
- except:
189
- host = '127.0.0.1'
190
- port = 9822
191
-
192
- numb_colons = self.ConString.count(":")
193
- if numb_colons == 1:
194
- self.ConString = self.ConString.replace(':', '::')
228
+ self.close_connection()
229
+ except Exception as close_err:
230
+ logging.error(f"Error closing connection after *tst? failure: {close_err}")
231
+ # Raise error indicating failed test
232
+ raise ConnectionError(f"No valid module response to *tst? command! Received: '{item}'")
233
+ logging.debug("*tst? check successful.")
234
+
235
+ def _parse_server_details(self, default_port: int) -> Tuple[str, int]:
236
+ """
237
+ Parses host and port from self.ConType for QIS/QPS connection types.
195
238
 
196
- self.connectionObj = QPSConnection(host, port)
197
- list = self.connectionObj.qps.sendCmdVerbose("$module list details").replace("\r\n","\n").split("\n")
198
- list_str = "".join(list).lower()
199
-
200
- timeout = time.time() + int(timeout) # now + n seconds
201
- # check for device in list, has a timeout
202
- while time.time() < timeout: # look for the connection string in QPS $list details
203
-
204
- # Check if it's a module's QTL number
205
- if "qtl" not in self.ConString.lower():
206
-
207
- # If not, check if it contains a valid IP address format
208
- ip_address = re.search(r"[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}", self.ConString)
209
- if not ip_address:
210
- raise ValueError("ConString " + self.ConString + " does not contain a valid QTL number or IP address")
211
-
212
- # Attempt to get QTL number from QPS "$list details"
213
- temp_str = _check_ip_in_qis_list(ip_address.group(), list)
214
- if temp_str:
215
- # If found
216
- self.ConString = temp_str
217
- break
218
-
219
- logging.debug("Did not find ip address in list details, attempt targetted QPS scan")
220
-
221
- # If it's not present in the list already, then try scanning for it via QPS
222
- # Scan is purposefully after initial check! 09/03/2023
223
- # Valid response example "Located device: 192.168.1.3"
224
-
225
- if "located" in str(self.connectionObj.qps.scanIP(self.ConString)).lower():
226
- # Note - QPS takes a moment or 2 to add this newly located device to the $list 21/03/23
227
- timeout += 20 # Extend the timeout as the drive was located
228
- while time.time() < timeout:
229
- # try find the QTL from ipaddress
230
- temp_str = _check_ip_in_qis_list(ip_address.group(), self.connectionObj.qps.get_list_details())
231
- if temp_str:
232
- # If the item is found, break out of this loop
233
- self.ConString = temp_str
234
- break
235
- time.sleep(1) # Slow down the poll
236
- else:
237
- # if it's not found, continue and allow program to timeout
238
- continue
239
- # Break out of both loops
240
- break
241
-
242
- elif str(self.ConString).lower() in str(list_str).lower():
243
- # If we have QTL device, and it's in list, nothing more needs done.
239
+ Expects self.ConType to be like "QIS" or "QIS:host:port".
240
+ Returns defaults ('127.0.0.1', default_port) if parsing fails or is not applicable.
241
+
242
+ Args:
243
+ default_port (int): The default port number for the server type (QIS/QPS).
244
+
245
+ Returns:
246
+ tuple[str, int]: A tuple containing the host (str) and port (int).
247
+ """
248
+ host = '127.0.0.1'
249
+ port = default_port
250
+ con_type_upper = self.ConType.upper()
251
+ # Determine prefix based on actual ConType start
252
+ prefix = "QIS" if con_type_upper.startswith("QIS") else "QPS" if con_type_upper.startswith("QPS") else None
253
+
254
+ if prefix:
255
+ try:
256
+ # Attempt to split ConType string like "QIS:host:port"
257
+ _, host_parsed, port_str = self.ConType.split(':')
258
+ port = int(port_str) # Convert port part to integer
259
+ host = host_parsed # Use parsed host
260
+ except ValueError:
261
+ # Handles cases where split fails (not 3 parts) or int conversion fails
262
+ # Only log warning if it looked like host/port were provided but were invalid
263
+ if con_type_upper != prefix:
264
+ logging.warning(f"Could not parse host/port from ConType '{self.ConType}', using defaults {host}:{port}.")
265
+ except Exception as e_parse:
266
+ # Catch any other unexpected parsing errors
267
+ logging.warning(f"Error parsing ConType '{self.ConType}': {e_parse}. Using defaults {host}:{port}.")
268
+ return host, port
269
+
270
+ def _prepare_server_con_string(self):
271
+ """
272
+ Formats self.ConString by replacing single ':' with '::' if needed.
273
+
274
+ This is sometimes required for QIS/QPS connection libraries when only
275
+ one colon is present in the identifier part (e.g., "TCP:ID" becomes "TCP::ID").
276
+
277
+ Modifies:
278
+ self.ConString
279
+ """
280
+ numb_colons = self.ConString.count(":")
281
+ # Apply replacement only if exactly one colon exists
282
+ if numb_colons == 1:
283
+ logging.debug(f"Replacing single colon ':' with '::' in ConString '{self.ConString}' for server connection.")
284
+ self.ConString = self.ConString.replace(':', '::')
285
+
286
+ def _verify_server_device(self, server_conn_obj: Any, server_type: str):
287
+ """
288
+ Finds and verifies the target device on a QIS or QPS server.
289
+
290
+ Repeatedly checks the server's device list for the target device
291
+ (self.ConString), handling identification by QTL number or IP address.
292
+ If identified by IP, resolves it to the device's actual connection string
293
+ (e.g., "TYPE::QTL...") using _check_ip_in_qis_list. May trigger a
294
+ network scan via the server connection object's scanIP method if needed.
295
+
296
+ Args:
297
+ server_conn_obj (Any): The specific QIS/QPS connection object
298
+ (e.g., self.connectionObj.qis). Type hinted as Any
299
+ as the exact type depends on the imported library.
300
+ server_type (str): "QIS" or "QPS" for logging/error messages.
301
+
302
+ Returns:
303
+ bool: True if the device was successfully found and verified.
304
+ `self.ConString` may be updated as a side effect if resolved via IP.
305
+
306
+ Raises:
307
+ ValueError: If ConString is IP-based but contains no valid IP.
308
+ TimeoutError: If the device cannot be found/verified within self.timeout.
309
+ Exception: Propagates exceptions from server_conn_obj methods.
310
+ """
311
+ # --- Initialization ---
312
+ logging.debug(f"Verifying device '{self.ConString}' on {server_type} server...")
313
+ list_details = None
314
+ list_str_lower = None
315
+ found = False
316
+ connect_timeout = time.time() + self.timeout # Calculate deadline
317
+
318
+ # --- Main Verification Loop ---
319
+ while time.time() < connect_timeout:
320
+ # --- Get current list details ---
321
+ try:
322
+ list_details = server_conn_obj.get_list_details() # Assumes method exists
323
+ list_str_lower = "".join(list_details).lower()
324
+ except Exception as e_list:
325
+ logging.warning(f"Failed to refresh {server_type} list details during check: {e_list}")
326
+ if time.time() >= connect_timeout:
244
327
  break
245
- else:
246
- time.sleep(1)
247
- list = self.connectionObj.qps.getDeviceList()
248
- list_str = "".join(list).lower()
249
- else: # If we didn't hit a 'break' condition in the above loop, then it timed out
250
- raise timeout_exception("Could not find module " + self.ConString + " from QPS within specified time")
328
+ time.sleep(1) # Wait before retrying list fetch
329
+ continue # Skip rest of loop iteration
330
+
331
+ # --- Determine target type (IP or QTL) ---
332
+ target_lower = self.ConString.lower()
333
+
334
+ if "qtl" not in target_lower:
335
+ # --- Target is likely IP Address ---
336
+ ip_match = re.search(r"\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}", target_lower)
337
+ if not ip_match:
338
+ raise ValueError(f"ConString '{self.ConString}' has no QTL and no valid IP for {server_type}.")
339
+ target_ip = ip_match.group()
340
+
341
+ # Call helper to find by IP (handles list check, scan, re-check)
342
+ resolved_string = self._find_device_by_ip(server_conn_obj, server_type, list_details, target_ip)
343
+ if resolved_string:
344
+ # Side effect: self.ConString was updated in helper
345
+ found = True
346
+ break # Exit main loop
347
+ # If _find_device_by_ip returns None, IP wasn't found in this iteration/scan attempt
348
+ else:
349
+ # --- Target is QTL Number ---
350
+ if self._find_device_by_qtl(list_str_lower, target_lower):
351
+ found = True # Found via QTL
352
+ break # Exit main loop
353
+
354
+ # --- Not found yet, wait before next iteration ---
355
+ if time.time() >= connect_timeout:
356
+ break # Exit loop if timeout reached before sleeping
357
+ logging.debug(f"Target '{self.ConString}' not found in {server_type} list yet. Waiting 1s before retry...")
358
+ time.sleep(1)
359
+
360
+ # --- Loop Finished: Final Check ---
361
+ if not found:
362
+ logging.error(f"Timeout: Could not find/verify module '{self.ConString}' in {server_type} within {self.timeout}s.")
363
+ raise TimeoutError(f"Could not find module '{self.ConString}' in {server_type} within {self.timeout}s")
364
+
365
+ logging.info(f"Successfully verified device '{self.ConString}' in {server_type}.")
366
+ return True # Indicate success
367
+
368
+ def _find_device_by_ip(self, server_conn_obj, server_type, list_details, target_ip):
369
+ """
370
+ Attempts to find the device via IP, potentially resolving it and scanning.
371
+
372
+ Checks the provided list, then optionally scans if not found and re-checks.
373
+ Updates self.ConString if resolved via IP lookup.
374
+
375
+ Args:
376
+ server_conn_obj: The specific QIS/QPS connection object (e.g., self.connectionObj.qis).
377
+ server_type (str): "QIS" or "QPS" for logging/error messages.
378
+ list_details (list): The current list details from the server.
379
+ target_ip (str): The IP address being searched for.
251
380
 
381
+ Returns:
382
+ str: The resolved ConString if found (and self.ConString is updated).
383
+ None: If not found via IP lookup or scan within this attempt.
252
384
 
385
+ Raises:
386
+ Exceptions from underlying scanIP or get_list_details calls.
387
+ """
388
+ # 1. Check current list details for the IP
389
+ resolved_con_string = _check_ip_in_qis_list(target_ip, list_details)
390
+ if resolved_con_string:
391
+ logging.info(f"Resolved IP {target_ip} to '{resolved_con_string}' from {server_type} list.")
392
+ self.ConString = resolved_con_string # Update instance ConString
393
+ return resolved_con_string # Return resolved string
394
+
395
+ # 2. IP not in list, attempt network scan if possible
396
+ logging.debug(f"IP {target_ip} not in {server_type} list, attempting network scan...")
397
+ try:
398
+ scan_method = getattr(server_conn_obj, 'scanIP', None)
399
+ if not scan_method:
400
+ logging.warning(f"scanIP method not found on {server_type} connection object.")
401
+ return None # Cannot scan
402
+
403
+ scan_response = scan_method(target_ip) # Scan using the target IP
404
+ if "located" not in str(scan_response).lower():
405
+ logging.debug(f"{server_type} scan for {target_ip} did not locate the device.")
406
+ return None # Scan didn't find it
407
+
408
+ # 3. Scan located the device, now re-check the list after a delay
409
+ logging.info(f"{server_type} located {target_ip} via scan. Re-checking list after delay...")
410
+ # Use a shorter, fixed timeout for this re-check phase
411
+ scan_recheck_timeout = time.time() + 20 # Allow 20s for list update
412
+ time.sleep(2) # Initial pause
413
+
414
+ while time.time() < scan_recheck_timeout:
415
+ current_list_details = server_conn_obj.get_list_details() # Re-fetch
416
+ resolved_con_string = _check_ip_in_qis_list(target_ip, current_list_details)
417
+ if resolved_con_string:
418
+ logging.info(f"Resolved IP {target_ip} to '{resolved_con_string}' after scan.")
419
+ self.ConString = resolved_con_string # Update instance ConString
420
+ return resolved_con_string # Return resolved string
421
+ # If not found yet, wait before checking again
422
+ if time.time() >= scan_recheck_timeout:
423
+ break # Check timeout before sleep
424
+ logging.debug(f"IP {target_ip} still not resolved in {server_type} list post-scan, retrying...")
425
+ time.sleep(1)
426
+
427
+ # If loop finishes without finding, log it
428
+ logging.warning(f"Device at {target_ip} was located by scan but did not appear resolvable in {server_type} list within timeout.")
429
+ return None # Not found even after scan
430
+
431
+ except Exception as e_findIP:
432
+ # Log errors during the scan process but don't necessarily stop verification yet
433
+ logging.warning(f"Error during {server_type} scan/re-check for {target_ip}: {e_findIP}")
434
+ return None # Indicate IP search failed for this attempt
435
+
436
+ @staticmethod
437
+ def _find_device_by_qtl(list_str_lower, target_qtl_lower):
438
+ """Checks if the target QTL identifier exists in the server list string."""
439
+ if target_qtl_lower in list_str_lower:
440
+ logging.debug(f"Found target QTL '{target_qtl_lower}' directly in server list.")
441
+ return True
442
+ return False
253
443
 
444
+ def _initialize_qis_connection(self):
445
+ """
446
+ Initializes the connection using the QIS method.
254
447
 
448
+ Parses host/port, prepares connection string, creates QISConnection object,
449
+ verifies the device presence on the server using the common helper, and
450
+ sets the device as default on the QIS server.
255
451
 
452
+ Sets:
453
+ self.connectionObj, self.ConString.
256
454
 
257
- ## Neither PY or QIS, connection cannot be created.
258
- else:
259
- raise ValueError("Invalid connection type. Acceptable values [PY,QIS,QPS]")
455
+ Raises:
456
+ ConnectionError: If connection or verification fails.
457
+ TimeoutError: If verification times out.
458
+ ImportError: If QISConnection class is missing.
459
+ """
460
+ logging.debug("Attempting QIS connection...")
461
+ host, port = self._parse_server_details(default_port=9722)
462
+ self._prepare_server_con_string()
463
+
464
+ # Create QISConnection object
465
+ try:
466
+ # Assumes QISConnection is imported
467
+ self.connectionObj = QISConnection(self.ConString, host, port)
468
+ logging.debug(f"QISConnection object created for '{self.ConString}' via {host}:{port}")
469
+ except Exception as e_qisconn:
470
+ logging.error(f"Failed to create QISConnection: {e_qisconn}", exc_info=True)
471
+ raise ConnectionError("Failed to establish QIS connection.") from e_qisconn
472
+
473
+ # Verify device presence on the QIS server
474
+ try:
475
+ # Pass the QIS-specific sub-object (self.connectionObj.qis) to the helper
476
+ self._verify_server_device(self.connectionObj.qis, "QIS")
477
+ except TimeoutError as e_timeout:
478
+ self.close_connection() # Close object if verification failed
479
+ raise e_timeout # Re-raise timeout
480
+ except Exception as e_qis_conn:
481
+ self.close_connection() # Close object if verification failed
482
+ raise ConnectionError(f"Failed QIS device verification: {e_qis_conn}") from e_qis_conn
483
+
484
+ # Set QIS default device
485
+ try:
486
+ set_default_cmd = f"$default {self.ConString}"
487
+ logging.debug(f"Setting QIS default device: {set_default_cmd}")
488
+ # Assumes sendAndReceiveCmd exists on QIS object
489
+ response = self.connectionObj.qis.sendAndReceiveCmd(cmd=set_default_cmd)
490
+ logging.debug(f"QIS set default response: {response}")
491
+ if "fail" in response.lower():
492
+ logging.warning(f"QIS command '$default {self.ConString}' failed.")
493
+ except Exception as e_def:
494
+ logging.warning(f"Error setting QIS default device: {e_def}")
495
+
496
+ def _initialize_qps_connection(self):
497
+ """
498
+ Initializes the connection using the QPS method.
260
499
 
261
- logging.debug(os.path.basename(__file__) + " ConString : " + str(self.ConString) + " ConType : " + str(self.ConType))
500
+ Parses host/port, prepares connection string, creates QPSConnection object,
501
+ and verifies the device presence on the server using the common helper.
262
502
 
503
+ Sets:
504
+ self.connectionObj, self.ConString (potentially updated).
263
505
 
264
- # def setCanStream(self):
265
- # ask module name if = name in list
266
- # TODO: The connectionObj should be an instance of a common base class such that the IF block here is not needed
267
- def sendCommand(self, CommandString, expectedResponse = True):
506
+ Raises:
507
+ ConnectionError: If connection or verification fails.
508
+ TimeoutError: If verification times out.
509
+ ImportError: If QPSConnection class is missing.
268
510
  """
269
- Executes a text based command on the device. This is the primary way of controlling a device. The full command set available to use
270
- is found in the technical manual for the device.
271
-
272
- Parameters
273
- ----------
274
- CommandString : str
511
+ logging.debug("Attempting QPS connection...")
512
+ host, port = self._parse_server_details(default_port=9822) # type: ignore[misc] # Private call ok
513
+ self._prepare_server_con_string() # type: ignore[misc] # Private call ok
275
514
 
276
- The text based command string to send to the device
277
-
278
- Returns
279
- -------
280
- command_response : str or None
515
+ # Create QPSConnection object
516
+ try:
517
+ # Assumes QPSConnection is imported
518
+ self.connectionObj = QPSConnection(host, port)
519
+ logging.debug(f"QPSConnection object created via {host}:{port}")
520
+ except Exception as e_qpsconn:
521
+ logging.error(f"Failed to create QPSConnection: {e_qpsconn}", exc_info=True)
522
+ raise ConnectionError("Failed to establish QPS connection.") from e_qpsconn
281
523
 
282
- The response text from the module. Multiline responses will be seperated with LF. Some commands
283
- do not return a response and None will be returned
524
+ # Verify device presence on the QPS server
525
+ try:
526
+ # Pass the QPS-specific sub-object (self.connectionObj.qps) to the helper
527
+ self._verify_server_device(self.connectionObj.qps, "QPS") # type: ignore[misc] # Private call ok
528
+ except TimeoutError as e_timeout:
529
+ self.close_connection() # Close object if verification failed
530
+ raise e_timeout # Re-raise timeout
531
+ except Exception as e_qps_conn:
532
+ self.close_connection() # Close object if verification failed
533
+ raise ConnectionError(f"Failed QPS device verification: {e_qps_conn}") from e_qps_conn
534
+ # QPS typically doesn't use/need a '$default' command
535
+
536
+ def _verify_connection_object(self):
537
+ """
538
+ Performs final checks to ensure a valid connection object exists.
284
539
 
540
+ Raises:
541
+ ConnectionError: If self.connectionObj is None or lacks expected attributes.
285
542
  """
543
+ if not self.connectionObj:
544
+ # This should ideally be caught by specific init helpers, but acts as a final safeguard
545
+ raise ConnectionError("Connection object (self.connectionObj) was not successfully created by initializer.")
286
546
 
287
- # send command to log
288
- logging.debug(os.path.basename(__file__) + ": "+self.ConType[:3]+" sending command: " + CommandString)
547
+ def __del__(self):
548
+ """ Ensures the connection is closed when the object is garbage collected. """
549
+ try:
550
+ # Close all connections
551
+ if not self.is_module_resetting:
552
+ self.close_connection()
553
+ else:
554
+ self.is_module_resetting = False
555
+ except Exception as e_close:
556
+ # Avoid errors during shutdown sequence
557
+ if logging and logging.error:
558
+ logging.error(f"Error during automatic connection close in destructor: {e_close}")
289
559
 
290
- if self.ConType[:3].upper() == "QIS":
560
+ # --- Public Methods (Wrappers + snake_case) ---
291
561
 
292
- numb_colons = self.ConString.count(":")
293
- if numb_colons == 1:
294
- self.ConString = self.ConString.replace(':', '::')
562
+ # --- sendCommand ---
563
+ def send_command(self, command_string: str, is_response_expected: bool = True) -> str:
564
+ """
565
+ Executes a text command on the connected device.
566
+
567
+ Sends the command string via the appropriate underlying connection object
568
+ (PY, QIS, or QPS) and returns the response. Handles QIS/QPS specific
569
+ formatting or command routing as needed.
570
+
571
+ Args:
572
+ command_string (str): The text command to send (e.g., "*IDN?").
573
+ is_response_expected (bool, optional): If False, the method may return
574
+ faster as it doesn't wait for/read a response. Defaults to True.
575
+
576
+ Returns:
577
+ str: The response string from the device. Returns an empty string if
578
+ no response was expected or received, or if the underlying connection
579
+ returned None.
580
+
581
+ Raises:
582
+ ConnectionError: If the device is not connected, or if communication fails.
583
+ TimeoutError: If the device response times out.
584
+ NotImplementedError: If the method is called for an unsupported ConType.
585
+ """
586
+ logging.debug(f"{os.path.basename(__file__)}: {self.ConType[:3]} sending command: {command_string}")
587
+
588
+ if not hasattr(self, 'connectionObj') or not self.connectionObj:
589
+ raise ConnectionError("Connection object not available in send_command.")
295
590
 
296
- response = self.connectionObj.qis.sendCommand(CommandString, device=self.ConString, expectedResponse=expectedResponse)
297
- # send response to log
298
- logging.debug(os.path.basename(__file__) + ": "+self.ConType[:3]+" received: " + response)
299
- return response
591
+ con_type_upper = self.ConType.upper()
592
+ try:
593
+ if con_type_upper.startswith("QIS"):
594
+ # Use current ConString state (might have been updated)
595
+ current_con_string = self.ConString
596
+ numb_colons = current_con_string.count(":")
597
+ if numb_colons == 1:
598
+ current_con_string = current_con_string.replace(':', '::')
599
+ # Assumes QISConnection type for connectionObj
600
+ response = self.connectionObj.qis.sendCommand(command_string, device=current_con_string, expectedResponse=is_response_expected)
601
+
602
+ elif con_type_upper == "PY":
603
+ # Assumes PYConnection type for connectionObj
604
+ if hasattr(self.connectionObj, 'connection') and hasattr(self.connectionObj.connection, 'sendCommand'):
605
+ response = self.connectionObj.connection.sendCommand(command_string, expectedResponse=is_response_expected)
606
+ else:
607
+ raise AttributeError("PYConnection object missing expected structure.")
300
608
 
301
- elif self.ConType.upper() == "PY":
302
- response = self.connectionObj.connection.sendCommand(CommandString, expectedResponse=expectedResponse)
303
- # send response to log
304
- logging.debug(os.path.basename(__file__) + ": "+self.ConType[:3]+" received: " + response)
305
- return response
609
+ elif con_type_upper.startswith("QPS"):
610
+ # Assumes QPSConnection type for connectionObj
611
+ if command_string and command_string[0] != '$':
612
+ command_string = f"{self.ConString} {command_string}" # Prepend target ID
613
+ response = self.connectionObj.qps.sendCommand(command_string, is_response_expected)
614
+ else:
615
+ raise NotImplementedError(f"send_command not implemented for ConType {self.ConType}")
306
616
 
307
- elif self.ConType[:3].upper() == "QPS":
308
- # If "$" CMD is for QPS, else its for the specific module. Since QPS can talk to many modules we must added the conString.
309
- if CommandString[0] != '$':
310
- CommandString = self.ConString + " " + CommandString
617
+ except timeout_exception: # Use platform specific timeout
618
+ logging.error(f"Timeout sending command: '{command_string}'")
619
+ raise TimeoutError(f"Timeout sending command: {command_string}")
620
+ except Exception as e_cmd_exception:
621
+ logging.error(f"Error sending command '{command_string}': {e_cmd_exception}", exc_info=True)
622
+ raise ConnectionError(f"Error sending command '{command_string}'") from e_cmd_exception
311
623
 
312
- response = self.connectionObj.qps.sendCommand(CommandString, expectedResponse)
313
- # send response to log
314
- logging.debug(os.path.basename(__file__) + ": "+self.ConType[:3]+" received: " + response)
315
- return response
624
+ response_str = response if response is not None else "" # Ensure string
625
+ logging.debug(f"{os.path.basename(__file__)}: {self.ConType[:3]} received: {response_str[:100]}{'...' if len(response_str) > 100 else ''}")
626
+ return response_str
316
627
 
628
+ def sendCommand(self, CommandString: str, expectedResponse: bool = True) -> str:
629
+ """
630
+ DEPRECATED - Use send_command instead.
317
631
 
318
- # Only works for usb
319
- # TODO: Can this be marked '_' for private use only
320
- def sendBinaryCommand(self, cmd):
321
- self.connectionObj.connection.Connection.SendCommand(cmd)
322
- return self.connectionObj.connection.Connection.BulkRead()
632
+ Executes a text command on the connected device.
323
633
 
634
+ Sends the command string via the appropriate underlying connection object
635
+ (PY, QIS, or QPS) and returns the response. Handles QIS/QPS specific
636
+ formatting or command routing as needed.
324
637
 
325
- # TODO: Not using class hierarchy based connectionObj, recreation of PYConnection may not release the previous handle in time.
326
- # QPS and QIS actions are different despite the underlying connection being the same!
327
- def openConnection(self):
638
+ Args:
639
+ CommandString (str): The text command to send (e.g., "*IDN?").
640
+ expectedResponse (bool, optional): If False, the method may return
641
+ faster as it doesn't wait for/read a response. Defaults to True.
642
+
643
+ Returns:
644
+ str: The response string from the device. Returns an empty string if
645
+ no response was expected or received, or if the underlying connection
646
+ returned None.
647
+
648
+ Raises:
649
+ ConnectionError: If the device is not connected, or if communication fails.
650
+ TimeoutError: If the device response times out.
651
+ NotImplementedError: If the method is called for an unsupported ConType.
328
652
  """
329
- Opens the connection to the module. This will be open by default on creation of quarchDevice but this
330
- allows re-opening if required.
331
-
653
+ return self.send_command(CommandString, expectedResponse)
654
+
655
+ # --- sendBinaryCommand ---
656
+ def send_binary_command(self, cmd: bytes) -> bytes:
332
657
  """
333
-
334
- logging.debug("Attempting to open " + self.ConType[:3] + " connection")
658
+ Sends a binary command and reads binary response (USB only).
335
659
 
336
- if self.ConType[:3] == "QIS":
337
- self.connectionObj.qis.connect() #todo should have a return val so that failed connections are caught.
660
+ This method is typically used for low-level or USB-specific communication.
661
+ It assumes a PY connection type with a specific underlying structure.
338
662
 
339
- elif self.ConType == "PY":
340
- del self.connectionObj
341
- self.connectionObj = PYConnection(self.ConString)
342
- return self.connectionObj
663
+ Args:
664
+ cmd (bytes): The binary command sequence to send.
343
665
 
344
- elif self.ConType[:3] == "QPS":
345
- return self.connectionObj.qps.connect(self.ConString)
666
+ Returns:
667
+ bytes: The binary data read back from the device.
346
668
 
347
- else:
348
- raise Exception("Connection type not recognised")
669
+ Raises:
670
+ TypeError: If the connection type is not PY or the underlying
671
+ connection object structure is unexpected.
672
+ ConnectionError: If communication fails.
673
+ """
674
+ # Check connection type and structure
675
+ if self.ConType.upper() != "PY" or \
676
+ not hasattr(self.connectionObj, 'connection') or \
677
+ not hasattr(self.connectionObj.connection, 'Connection') or \
678
+ not hasattr(self.connectionObj.connection.Connection, 'SendCommand') or \
679
+ not hasattr(self.connectionObj.connection.Connection, 'BulkRead'):
680
+ raise TypeError(f"send_binary_command requires a PY connection with a USB connection.")
681
+
682
+ logging.debug("Sending binary command...")
683
+ try:
684
+ self.connectionObj.connection.Connection.SendCommand(cmd)
685
+ response = self.connectionObj.connection.Connection.BulkRead()
686
+ except Exception as e_binary_exception:
687
+ logging.error(f"Error during binary command: {e_binary_exception}", exc_info=True)
688
+ raise ConnectionError("Failed to send/receive binary command.") from e_binary_exception
689
+
690
+ logging.debug("Received binary response.")
691
+ return response if response is not None else b"" # Ensure bytes return
692
+
693
+ def sendBinaryCommand(self, cmd: bytes) -> bytes:
694
+ """
695
+ DEPRECATED - Use send_binary_command instead.
696
+
697
+ Sends a binary command and reads binary response (USB only).
698
+
699
+ This method is typically used for low-level or USB-specific communication.
700
+ It assumes a PY connection type with a specific underlying structure.
701
+
702
+ Args:
703
+ cmd (bytes): The binary command sequence to send.
704
+
705
+ Returns:
706
+ bytes: The binary data read back from the device.
707
+
708
+ Raises:
709
+ TypeError: If the connection type is not PY or the underlying
710
+ connection object structure is unexpected.
711
+ ConnectionError: If communication fails.
712
+ """
713
+ return self.send_binary_command(cmd)
714
+
715
+ # --- openConnection ---
716
+ def open_connection(self) -> Any:
717
+ """
718
+ Opens or re-opens the connection to the module.
719
+
720
+ Handles reopening logic based on the connection type (PY, QIS, QPS).
721
+ For PY, it recreates the connection object. For QIS/QPS, it calls
722
+ the underlying connect method.
723
+
724
+ Returns:
725
+ Any: For PY connections, returns the new PYConnection object.
726
+ For QIS/QPS, returns the result of the underlying connect call
727
+ (could be bool or other status). Returns True for successful QIS connect.
728
+
729
+ Raises:
730
+ AttributeError: If the connection object is missing expected methods (connect).
731
+ ConnectionError: If reopening the connection fails.
732
+ ValueError: If the connection type is not recognized.
733
+ """
734
+ logging.debug(f"Attempting to open {self.ConType[:3]} connection")
735
+ con_type_upper = self.ConType.upper()
736
+
737
+ try:
738
+ if con_type_upper.startswith("QIS"):
739
+ if hasattr(self.connectionObj, 'qis') and hasattr(self.connectionObj.qis, 'connect'):
740
+ self.connectionObj.qis.connect()
741
+ logging.info("QIS connect called.")
742
+ return True # Assume success if no exception (original TODO noted lack of return check)
743
+ else:
744
+ raise AttributeError("QIS connection object or connect method not found.")
745
+
746
+ elif con_type_upper == "PY":
747
+ # Recreate PYConnection (original logic, potentially risky)
748
+ logging.warning("Recreating PYConnection in open_connection. Previous handles might linger.")
749
+ if self.connectionObj and hasattr(self.connectionObj, 'connection') and hasattr(self.connectionObj.connection, 'close'):
750
+ try:
751
+ self.connectionObj.connection.close() # Close old one first
752
+ except Exception as e_connection_exception:
753
+ logging.warning(f"Unable to close old PY Connection: {e_connection_exception}")
754
+ pass
755
+ # Recreate (assumes PYConnection is imported)
756
+ self.connectionObj = PYConnection(self.ConString)
757
+ logging.info(f"PY Connection recreated for {self.ConString}")
758
+ # Update internal details
759
+ self.ConCommsType = getattr(self.connectionObj, 'ConnTypeStr', None)
760
+ self.connectionName = getattr(self.connectionObj, 'ConnTarget', None)
761
+ self.connectionTypeName = self.ConCommsType
762
+ return self.connectionObj # Return new object
763
+
764
+ elif con_type_upper.startswith("QPS"):
765
+ if hasattr(self.connectionObj, 'qps') and hasattr(self.connectionObj.qps, 'connect'):
766
+ result = self.connectionObj.qps.connect(self.ConString)
767
+ logging.info(f"QPS connect called for {self.ConString}. Result: {result}")
768
+ return result
769
+ else:
770
+ raise AttributeError("QPS connection object or connect method not found.")
349
771
 
772
+ else:
773
+ raise ValueError("Connection type not recognised in open_connection")
774
+
775
+ except Exception as e_conn:
776
+ logging.error(f"Failed to open connection for {self.ConString} ({self.ConType}): {e_conn}", exc_info=True)
777
+ raise ConnectionError(f"Failed to open connection for {self.ConString}") from e_conn
778
+
779
+ def openConnection(self) -> Any:
780
+ """
781
+ DEPRECATED - Use open_connection instead.
782
+
783
+ Opens or re-opens the connection to the module.
784
+
785
+ Handles reopening logic based on the connection type (PY, QIS, QPS).
786
+ For PY, it recreates the connection object. For QIS/QPS, it calls
787
+ the underlying connect method.
788
+
789
+ Returns:
790
+ Any: For PY connections, returns the new PYConnection object.
791
+ For QIS/QPS, returns the result of the underlying connect call
792
+ (could be bool or other status). Returns True for successful QIS connect.
350
793
 
351
- # TODO: Not using class hierarchy based connectionObj. QPS and QIS actions are different despite the underlying connection being the same!
352
- def closeConnection(self):
794
+ Raises:
795
+ AttributeError: If the connection object is missing expected methods (connect).
796
+ ConnectionError: If reopening the connection fails.
797
+ ValueError: If the connection type is not recognized.
353
798
  """
354
- Closes the connection to the module, freeing the module for other uses. This should always be called whern you are finished with a device.
355
-
799
+ return self.open_connection()
800
+
801
+ # --- closeConnection ---
802
+ def close_connection(self) -> str:
356
803
  """
357
-
358
- logging.debug("Attempting to close " + self.ConType[:3] + " connection")
804
+ Closes the connection to the module.
359
805
 
360
- if self.ConType[:3] == "QIS":
361
- #self.connectionObj.qis.disconnect()
362
- self.connectionObj.qis.closeConnection(conString=self.ConString)
363
- elif self.ConType == "PY":
364
- self.connectionObj.connection.close()
806
+ Handles closing logic based on connection type (PY, QIS, QPS).
807
+ Clears the internal connection object reference upon successful close.
365
808
 
366
- elif self.ConType[:3] == "QPS":
367
- self.connectionObj.qps.disconnect(self.ConString)
809
+ Returns:
810
+ str: "OK" on success, "FAIL" on failure or if no connection exists.
811
+ """
812
+ # This method contains the original logic from closeConnection
813
+ logging.debug(f"Attempting to close {self.ConType[:3]} connection for {self.ConString}")
814
+ con_type_upper = self.ConType.upper()
815
+ closed_ok = False
816
+ conn_obj_to_close = self.connectionObj # Work with current object
368
817
 
369
- return "OK"
818
+ if conn_obj_to_close is None:
819
+ logging.debug("No connection object exists to close.")
820
+ return "OK" # Nothing to do
370
821
 
822
+ try:
823
+ if con_type_upper.startswith("QIS"):
824
+ if hasattr(conn_obj_to_close, 'qis') and hasattr(conn_obj_to_close.qis, 'closeConnection'):
825
+ if isQisRunning():
826
+ conn_obj_to_close.qis.closeConnection(conString=self.ConString)
827
+ closed_ok = True
828
+ else:
829
+ logging.warning("QIS connection object or closeConnection method not found.")
371
830
 
372
- # TODO: Not using class hierarchy based connectionObj.
373
- def resetDevice(self, timeout=10):
831
+ elif con_type_upper == "PY":
832
+ if hasattr(conn_obj_to_close, 'connection') and hasattr(conn_obj_to_close.connection, 'close'):
833
+ conn_obj_to_close.connection.close()
834
+ closed_ok = True
835
+ else:
836
+ logging.warning("PY connection object structure invalid for close.")
837
+
838
+ elif con_type_upper.startswith("QPS"):
839
+ if hasattr(conn_obj_to_close, 'qps') and hasattr(conn_obj_to_close.qps, 'disconnect'):
840
+ if isQpsRunning():
841
+ conn_obj_to_close.qps.disconnect(self.ConString) # QPS uses disconnect
842
+ closed_ok = True
843
+ else:
844
+ logging.warning("QPS connection object or disconnect method not found.")
845
+ else:
846
+ logging.error(f"Cannot close unknown connection type: {self.ConType}")
847
+
848
+ if closed_ok:
849
+ logging.info(f"Connection closed for {self.ConString}")
850
+ self.connectionObj = None # Clear reference only if close succeeded
851
+ return "OK"
852
+ else:
853
+ logging.warning(f"Could not close connection for {self.ConString} - state uncertain.")
854
+ return "FAIL"
855
+
856
+ except Exception as e_close:
857
+ logging.error(f"Error during close_connection for {self.ConString}: {e_close}", exc_info=True)
858
+ # Do not clear self.connectionObj if close failed with exception
859
+ return "FAIL"
860
+
861
+ def closeConnection(self) -> str:
374
862
  """
375
- Issues a power-on-reset command to the device. Attempts to recover the connection to the module after reset.
376
- Function halts until the timeout is complete or the module is found
377
-
378
- Parameters
379
- ----------
380
- timeout : int
381
-
382
- Number of seconds to wait for the module to re-enumerate and become available
383
-
384
- Returns
385
- -------
386
- result : bool
387
-
388
- True if the device was found and reconnected, false if it was not and we timed out
389
-
863
+ DEPRECATED - Use close_connection instead.
864
+
865
+ Closes the connection to the module.
866
+
867
+ Handles closing logic based on connection type (PY, QIS, QPS).
868
+ Clears the internal connection object reference upon successful close.
869
+
870
+ Returns:
871
+ str: "OK" on success, "FAIL" on failure or if no connection exists.
390
872
  """
873
+ return self.close_connection()
391
874
 
392
- # send command to log
393
- logging.debug(os.path.basename(__file__) + ": sending command: *rst" )
875
+ # --- resetDevice ---
876
+ def reset_device(self, timeout: int = 10) -> bool:
877
+ """
878
+ Issues a reset command and attempts recovery.
394
879
 
395
- if self.ConType[:3] == "QIS":
880
+ Sends '*rst' to the device, handles connection type specifics (like
881
+ closing PY connection), then attempts to reconnect within the timeout period.
396
882
 
397
- numb_colons = self.ConString.count(":")
398
- if numb_colons == 1:
399
- self.ConString = self.ConString.replace(':', '::')
883
+ Args:
884
+ timeout (int, optional): Seconds to wait for reconnection. Defaults to 10.
400
885
 
401
- retval = self.ConString
402
- self.connectionObj.qis.sendCmd(self.ConString, "*rst", expectedResponse = False)
403
- logging.debug(os.path.basename(__file__) + ": connecting back to " + retval)
886
+ Returns:
887
+ bool: True if reset and reconnection were successful, False otherwise.
404
888
 
405
- elif self.ConType == "PY":
406
- retval = self.ConString
407
- self.connectionObj.connection.sendCommand("*rst" , expectedResponse = False)
408
- self.connectionObj.connection.close()
409
- logging.debug(os.path.basename(__file__) + ": connecting back to " + retval)
410
- #pos fix for making new connectionObj. Works for py connection but more complex for qis & qps
411
- #self.connectionObj = PYConnection(self.ConString)
889
+ Raises:
890
+ ConnectionError: If sending the reset command fails initially (and connection exists).
891
+ """
892
+ logging.debug(f"{os.path.basename(__file__)}: sending command: *rst")
893
+ self.is_module_resetting = True
412
894
 
413
- elif self.ConType[:3] == "QPS":
414
- # checking if the command string passed has a $ as first char
415
- retval = self.ConString
416
- CommandString = self.ConString + " " + "*rst"
417
- self.connectionObj.qps.sendCmdVerbose(CommandString, expectedResponse = False)
418
- logging.debug(os.path.basename(__file__) + ": connecting back to " + retval)
895
+ original_con_string = self.ConString # Store original target before potential modification
896
+ original_con_type = self.ConType # Store original type
897
+ con_type_upper = self.ConType.upper()
419
898
 
420
- #TODO: Idealy we want to call an openConnection() funct to set the connectionObj to the new value not creating a new obj
899
+ if not hasattr(self, 'connectionObj') or not self.connectionObj:
900
+ logging.error("Cannot reset device, no connection object.")
901
+ return False
421
902
 
422
- temp = None
903
+ # --- Send Reset Command ---
904
+ try:
905
+ if con_type_upper.startswith("QIS"):
906
+ current_con_string = original_con_string
907
+ numb_colons = current_con_string.count(":")
908
+ if numb_colons == 1:
909
+ current_con_string = current_con_string.replace(':', '::')
910
+ self.connectionObj.qis.sendCmd(current_con_string, "*rst", expectedResponse=False)
911
+ elif con_type_upper == "PY":
912
+ self.connectionObj.connection.sendCommand("*rst", expectedResponse=False)
913
+ self.connectionObj.connection.close() # Close PY after reset
914
+ self.connectionObj = None # Clear potentially invalid object
915
+ elif con_type_upper.startswith("QPS"):
916
+ CommandString = f"{original_con_string} *rst"
917
+ self.connectionObj.qps.sendCmdVerbose(CommandString, expectedResponse=False)
918
+ else:
919
+ logging.error(f"Reset not supported for connection type {self.ConType}")
920
+ return False
921
+ logging.debug("*rst command sent successfully.")
922
+
923
+ except Exception as e_reset:
924
+ logging.error(f"Error sending *rst command: {e_reset}", exc_info=True)
925
+ # Attempt to close connection forcefully on error before recovery attempt?
926
+ try:
927
+ self.close_connection()
928
+ except Exception as e_close:
929
+ logging.warning(f"Unable to close current connection: {e_close}")
930
+ pass
931
+ # Return False as reset command itself failed
932
+ return False
933
+
934
+ # --- Recovery Attempt ---
935
+ logging.debug(f"Attempting to reconnect to {original_con_string} after reset...")
936
+ temp_device = None
423
937
  startTime = time.time()
424
- time.sleep(0.6) #most devices are visable again after 0.6 seconds.
425
- while temp == None:
938
+ time.sleep(0.6)
939
+
940
+ while temp_device is None:
941
+ # Check timeout
942
+ if (time.time() - startTime) > timeout:
943
+ logging.critical(f"Reconnection failed to {original_con_string} within {timeout}s timeout.")
944
+ self.connectionObj = None # Ensure connectionObj is None if recovery failed
945
+ return False
426
946
  try:
427
- #user_interface.printText("Restart time is : " + str(time.time() - startTime) + " timeout is : " + str(timeout))
428
- temp = getQuarchDevice(retval)
429
- except:
430
- time.sleep(0.2) # wait before trying again if not timed out.
431
- if (time.time() - startTime) > timeout:
432
- logging.critical(os.path.basename(__file__) + ": connection failed to " + retval)
433
- return False
434
-
435
- self.connectionObj = temp.connectionObj
436
- time.sleep(1) #Must wait before sending a command to device. If done instantly device errors out "device busy"
947
+ # Calculate remaining timeout for the attempt
948
+ remaining_timeout = max(1, timeout - int(time.time() - startTime))
949
+ temp_device = get_quarch_device(original_con_string, ConType=original_con_type, timeout=str(remaining_timeout))
950
+ except Exception as recon_e:
951
+ logging.debug(f"Reconnect attempt failed: {recon_e}. Retrying...")
952
+ time.sleep(0.2)
953
+
954
+ # --- Recovery Successful ---
955
+ logging.info(f"Successfully reconnected to {original_con_string} after reset.")
956
+ # Replace the current connection object and potentially other details
957
+ self.connectionObj = temp_device.connectionObj
958
+ self.ConString = temp_device.ConString # Update ConString (might have changed if resolved)
959
+ self.ConType = temp_device.ConType # Update ConType (should likely be same?)
960
+ # Copy other relevant attributes if necessary
961
+ self.timeout = temp_device.timeout
962
+ if hasattr(temp_device, 'ConCommsType'):
963
+ self.ConCommsType = temp_device.ConCommsType
964
+ if hasattr(temp_device, 'connectionName'):
965
+ self.connectionName = temp_device.connectionName
966
+ if hasattr(temp_device, 'connectionTypeName'):
967
+ self.connectionTypeName = temp_device.connectionTypeName
968
+
969
+ time.sleep(1)
437
970
  return True
438
-
439
-
440
- def sendAndVerifyCommand(self, commandString, responseExpected="OK", exception=True):
441
- """
442
- Sends a command to the device and verifies the response is as expected. This is a simple
443
- wrapper of sendCommand and helps write cleaner code in test scripts.
444
-
445
- Parameters
446
- ----------
447
- commandString : str
448
-
449
- The text command to send to the device
450
-
451
- commandString : str, optional
452
-
453
- The expected text response from the module.
454
-
455
- exception : bool, optional
456
-
457
- If True, an exception is raised on mismatch. If False, we just return False
458
-
459
- Returns
460
- -------
461
- result : bool
462
-
463
- True if we matched the response, False if we did not
464
-
465
- Raises
466
- ------
467
- ValueError
468
- If the response does not match AND the exception parameter is set to True
469
-
470
- """
471
-
472
- responseStr = self.sendCommand(commandString)
473
- if (responseStr != responseExpected):
474
- if (exception):
475
- raise ValueError("Command Sent: " + commandString + ", Expected response: " + responseExpected + ", Response received: " + responseStr)
971
+
972
+ def resetDevice(self, timeout: int = 10) -> bool:
973
+ """
974
+ DEPRECATED - Use reset_device instead.
975
+
976
+ Issues a reset command and attempts recovery.
977
+
978
+ Sends '*rst' to the device, handles connection type specifics (like
979
+ closing PY connection), then attempts to reconnect within the timeout period.
980
+
981
+ Args:
982
+ timeout (int, optional): Seconds to wait for reconnection. Defaults to 10.
983
+
984
+ Returns:
985
+ bool: True if reset and reconnection were successful, False otherwise.
986
+
987
+ Raises:
988
+ ConnectionError: If sending the reset command fails initially (and connection exists).
989
+ """
990
+ return self.reset_device(timeout)
991
+
992
+ # --- send_and_verify_command/sendAndVerifyCommand ---
993
+ def send_and_verify_command(self, command_string: str, expected_response: str = "OK", exception: bool = True) -> bool:
994
+ """
995
+ Sends a command and verifies the response matches expected string.
996
+
997
+ A convenience wrapper around `send_command`.
998
+
999
+ Args:
1000
+ command_string (str): The text command to send.
1001
+ expected_response (str, optional): The exact string expected back from
1002
+ the device. Defaults to "OK". Comparison is case-sensitive.
1003
+ exception (bool, optional): If True, raises ValueError if the response
1004
+ does not match. If False, returns False on mismatch. Defaults to True.
1005
+
1006
+ Returns:
1007
+ bool: True if the response matched `expected_response`, False otherwise
1008
+ (only if `exception` is False).
1009
+
1010
+ Raises:
1011
+ ValueError: If the response does not match `expected_response` and
1012
+ `exception` is True.
1013
+ ConnectionError: If sending the command fails.
1014
+ TimeoutError: If the device times out responding.
1015
+ """
1016
+ responseStr = self.send_command(command_string)
1017
+
1018
+ if responseStr != expected_response:
1019
+ error_msg = f"Command Sent: '{command_string}', Expected response: '{expected_response}', Response received: '{responseStr}'"
1020
+ logging.error(error_msg)
1021
+ if exception:
1022
+ raise ValueError(error_msg)
476
1023
  else:
477
1024
  return False
478
1025
  else:
1026
+ logging.debug(f"Command '{command_string}' verified successfully (Response: '{expected_response}').")
479
1027
  return True
480
1028
 
1029
+ def sendAndVerifyCommand(self, commandString: str, responseExpected: str = "OK", exception: bool = True) -> bool:
1030
+ """
1031
+ DEPRECATED - Use send_and_verify_command instead.
1032
+
1033
+ Sends a command and verifies the response matches expected string.
1034
+
1035
+ A convenience wrapper around `send_command`.
1036
+
1037
+ Args:
1038
+ commandString (str): The text command to send.
1039
+ responseExpected (str, optional): The exact string expected back from
1040
+ the device. Defaults to "OK". Comparison is case-sensitive.
1041
+ exception (bool, optional): If True, raises ValueError if the response
1042
+ does not match. If False, returns False on mismatch. Defaults to True.
1043
+
1044
+ Returns:
1045
+ bool: True if the response matched `expected_response`, False otherwise
1046
+ (only if `exception` is False).
1047
+
1048
+ Raises:
1049
+ ValueError: If the response does not match `expected_response` and
1050
+ `exception` is True.
1051
+ ConnectionError: If sending the command fails.
1052
+ TimeoutError: If the device times out responding.
1053
+ """
1054
+ return self.send_and_verify_command(commandString, responseExpected, exception)
1055
+
1056
+ # --- get_runtime/getRuntime ---
1057
+ def get_runtime(self, command: str = "conf:runtimes?") -> Optional[int]:
1058
+ """
1059
+ Queries the device runtime and returns it as an integer in seconds.
1060
+
1061
+ Handles potential "FAIL" responses and non-numeric/non-'s' terminated responses.
1062
+
1063
+ Args:
1064
+ command (str, optional): The specific command to query runtime.
1065
+ Defaults to "conf:runtimes?". Can be overridden for different
1066
+ modules (e.g., PAM fixtures).
1067
+
1068
+ Returns:
1069
+ Optional[int]: The runtime in seconds if successfully parsed, otherwise None.
1070
+ """
1071
+ runtime_str = self.send_command(command)
1072
+
1073
+ if runtime_str is None:
1074
+ logging.error(f"Received None response for runtime command: {command}")
1075
+ return None
481
1076
 
482
- def getRuntime(self, command="conf:runtimes?"):
483
- '''
484
-
485
- :param command: can be overridden to ask for PAM fixture runtime
486
- :return:
487
- '''
488
- runtime = self.sendCommand(command)
489
- if runtime.lower().__contains__("fail"):
490
- logging.error("runtime check failed, check FW and FPGA are up to date")
491
- # if the response matches [int]s then the result was valid, return digits, (otherwise return None)
492
- if runtime.endswith("s"):
493
- try :
494
- runtime = int(runtime[:-1])
495
- return runtime
496
- except:
497
- logging.error("runtime response not a valid int : " + str(runtime))
1077
+ # Use case-insensitive check for "fail"
1078
+ if "fail" in runtime_str.lower():
1079
+ logging.error(f"Runtime check failed (Command: {command}, Response: {runtime_str}), check FW/FPGA?")
1080
+ return None # Return None on failure
1081
+
1082
+ # Check if response ends with 's' and try conversion
1083
+ if isinstance(runtime_str, str) and runtime_str.endswith("s"):
1084
+ try:
1085
+ runtime_int = int(runtime_str[:-1])
1086
+ logging.debug(f"Runtime parsed as {runtime_int} seconds.")
1087
+ return runtime_int
1088
+ except ValueError:
1089
+ logging.error(f"Runtime response '{runtime_str}' not a valid int format.")
1090
+ return None
1091
+ except Exception as e_runtime:
1092
+ logging.error(f"Unexpected error parsing runtime '{runtime_str}': {e_runtime}", exc_info=True)
1093
+ return None
498
1094
  else:
1095
+ # Log if format is unexpected
1096
+ logging.warning(f"Runtime response '{runtime_str}' did not end with 's' or was not string. Cannot parse as seconds.")
499
1097
  return None
500
1098
 
1099
+ def getRuntime(self, command: str = "conf:runtimes?") -> Optional[int]:
1100
+ """
1101
+ DEPRECATED - Use get_runtime instead.
1102
+
1103
+ Queries the device runtime and returns it as an integer in seconds.
501
1104
 
502
- def _check_ip_in_qis_list(ip_address, detailed_device_list):
1105
+ Handles potential "FAIL" responses and non-numeric/non-'s' terminated responses.
1106
+
1107
+ Args:
1108
+ command (str, optional): The specific command to query runtime.
1109
+ Defaults to "conf:runtimes?". Can be overridden for different
1110
+ modules (e.g., PAM fixtures).
1111
+
1112
+ Returns:
1113
+ Optional[int]: The runtime in seconds if successfully parsed, otherwise None.
1114
+ """
1115
+ return self.get_runtime(command)
1116
+
1117
+
1118
+ # --- Top-Level Function Definitions ---
1119
+
1120
+ def _check_ip_in_qis_list(ip_address: str, detailed_device_list: list) -> Optional[str]:
503
1121
  """
504
- Checks if the IP address is in qis device list
505
- :param detailed_device_list: list formatted return from qis command "$list details"
506
- :return String : return contype and constring for module if it's in list, else None
1122
+ Checks if an IP address exists in a QIS/QPS device list detail output.
1123
+
1124
+ Parses the list provided by the server to find an entry matching the IP
1125
+ address (specifically for TCP entries) and returns the corresponding
1126
+ full connection string (e.g., "TCP::QTL...") if found.
1127
+
1128
+ Args:
1129
+ ip_address (str): The IP address to search for.
1130
+ detailed_device_list (list[str]): A list where each string is a line
1131
+ from the server's "$list details" or "$module list details" output.
1132
+
1133
+ Returns:
1134
+ Optional[str]: The resolved connection string (e.g., "TCP::QTL...") if a
1135
+ matching TCP entry is found, otherwise None.
507
1136
  """
508
- # logging.debug(f"List details from Qis : \n{str(''.join(detailed_device_list))}")
509
-
510
- for module in detailed_device_list:
511
- # Use generator expression to filter word starting with 'IP:' in the qis module string this is to prevent a similar ip from being selected e.g. 192.168.1.1 and 192.168.1.12
512
- module_ip_address = next((word[3:] for word in module.split() if word.startswith('IP:')), "")
513
- # Note for future developers : Restricted this to only TCP modules, not RESt
514
- if ip_address == module_ip_address and "tcp" in module.lower():
515
- # '1) REST::QTL2312-01-009 IP:192.168.1.5 Port:80 NBName:2312-01-009 Stream:No Name:Power Analysis Module'
516
- # Split on spaces and grab second element ("tcp::qtl2312-01-009")
517
- ret_string = module.split()[1]
518
- return ret_string
519
-
520
- # If the ip address wasn't found, then return none
1137
+ # This function's logic remains unchanged
1138
+ if not detailed_device_list:
1139
+ return None
1140
+
1141
+ for module_line in detailed_device_list:
1142
+ # Use regex to find IP pattern robustly
1143
+ ip_match = re.search(r"\bIP:(" + re.escape(ip_address) + r")\b", module_line) # Match exact IP
1144
+ if ip_match:
1145
+ # Found the IP, check if it's a TCP entry
1146
+ if "tcp" in module_line.lower():
1147
+ # Try to extract the "TYPE::ID" part using regex or split
1148
+ conn_str_match = re.search(r"^\s*\d+\)\s+([A-Z]+::\S+)", module_line) # Look for "N) TYPE::ID"
1149
+ if conn_str_match:
1150
+ logging.debug(f"Resolved IP {ip_address} using regex to: {conn_str_match.group(1)}")
1151
+ return conn_str_match.group(1)
1152
+ else:
1153
+ # Fallback to original split method if regex fails
1154
+ parts = module_line.split()
1155
+ if len(parts) > 1 and "::" in parts[1]:
1156
+ logging.debug(f"Resolved IP {ip_address} using split method to: {parts[1]}")
1157
+ return parts[1]
1158
+ else:
1159
+ logging.warning(f"Found IP {ip_address} in TCP line, but couldn't extract TYPE::ID: {module_line}")
1160
+ else:
1161
+ logging.debug(f"IP {ip_address} found but not a TCP entry: {module_line}")
1162
+
1163
+ # IP address not found in any relevant line
521
1164
  return None
522
1165
 
523
1166
 
524
- # TODO: Can we make this an '_' internal function?
525
- def checkModuleFormat(ConString):
526
- ConnectionTypes = ["USB", "SERIAL", "TELNET", "REST", "TCP"] # acceptable conTypes
1167
+ # --- checkModuleFormat / check_module_format ---
1168
+ def check_module_format(ConString: str) -> bool:
1169
+ """
1170
+ Checks the basic validity of a connection string format.
1171
+
1172
+ Verifies presence of ':', checks against allowed connection types,
1173
+ and validates the number of colons or sub-device format.
1174
+
1175
+ Args:
1176
+ ConString (str): The connection string to validate.
1177
+
1178
+ Returns:
1179
+ bool: True if the format seems valid, False otherwise.
527
1180
 
1181
+ Note:
1182
+ Uses a specific list of allowed connection types defined within.
1183
+ May recursively call itself to validate controller part of sub-device strings.
1184
+ """
1185
+ if not ConString:
1186
+ return True # Allow empty
1187
+ if ':' not in ConString:
1188
+ logging.warning("check_module_format: Connection string missing ':'.")
1189
+ return False
1190
+
1191
+ ConnectionTypes = ["USB", "SERIAL", "TELNET", "REST", "TCP"]
528
1192
  conTypeSpecified = ConString[:ConString.find(':')]
529
1193
 
530
1194
  correctConType = False
531
1195
  for value in ConnectionTypes:
532
1196
  if value.lower() == conTypeSpecified.lower():
533
1197
  correctConType = True
1198
+ break
534
1199
 
535
1200
  if not correctConType:
536
- logging.warning("Invalid connection type specified in Module string, use one of [USB|SERIAL|TELNET|REST|TCP]")
537
- logging.warning("Invalid connection string: " + ConString)
1201
+ logging.warning(f"Invalid connection type specified ('{conTypeSpecified}'). Use one of {ConnectionTypes}")
1202
+ logging.warning(f"Invalid connection string: {ConString}")
538
1203
  return False
539
1204
 
540
1205
  numb_colons = ConString.count(":")
541
- if numb_colons > 2 or numb_colons <= 0:
542
- logging.warning("Invalid number of colons in module string")
543
- logging.warning("Invalid connection string: " + ConString)
1206
+
1207
+ # Check sub-device format first
1208
+ if "<" in ConString and ">" in ConString:
1209
+ match = re.match(r"^[A-Z]+:[^<>:]+<\d+>$", ConString, re.IGNORECASE)
1210
+ if match:
1211
+ controller_part = ConString.split('<')[0]
1212
+ if check_module_format(controller_part): # Recursive call
1213
+ return True
1214
+ else:
1215
+ logging.warning(f"Invalid controller part '{controller_part}' in '{ConString}'")
1216
+ else:
1217
+ logging.warning(f"Invalid sub-device syntax: '{ConString}'")
1218
+ # If sub-device checks failed, return False
544
1219
  return False
1220
+ else:
1221
+ # Not a sub-device, check original strict colon count (1 or 2)
1222
+ if numb_colons > 2 or numb_colons <= 0:
1223
+ logging.warning(f"Invalid number of colons ({numb_colons}) in module string (expected 1 or 2).")
1224
+ logging.warning(f"Invalid connection string: {ConString}")
1225
+ return False
545
1226
 
1227
+ # Passed basic checks
546
1228
  return True
547
1229
 
548
1230
 
549
- def getQuarchDevice(connectionTarget, ConType="PY", timeout="5"):
550
- '''creates a quarch device to be returned. Handles sub devices in quarch arrays. '''
1231
+ # Original checkModuleFormat function, kept for compatibility, now calls snake_case version
1232
+ def checkModuleFormat(ConString: str) -> bool:
1233
+ """
1234
+ DEPRECATED - Use check_module_format instead.
1235
+
1236
+ Checks the basic validity of a connection string format.
1237
+
1238
+ Verifies presence of ':', checks against allowed connection types,
1239
+ and validates the number of colons or sub-device format.
1240
+
1241
+ Args:
1242
+ ConString (str): The connection string to validate.
1243
+
1244
+ Returns:
1245
+ bool: True if the format seems valid, False otherwise.
1246
+
1247
+ Note:
1248
+ Uses a specific list of allowed connection types defined within.
1249
+ May recursively call itself to validate controller part of sub-device strings.
1250
+ """
1251
+ return check_module_format(ConString)
1252
+
1253
+
1254
+ # --- getQuarchDevice / get_quarch_device ---
1255
+ def get_quarch_device(connectionTarget: str, ConType: str = "PY", timeout: str = "5") -> 'Union[quarchDevice, subDevice]':
1256
+ """
1257
+ Creates and returns a quarchDevice or subDevice instance.
1258
+
1259
+ Parses the connectionTarget, determines if it's a standard device or a
1260
+ sub-device (e.g., "TYPE:ID<PORT>"), and instantiates the appropriate
1261
+ quarchDevice or subDevice object via the quarchArray class if needed.h
1262
+
1263
+ Args:
1264
+ connectionTarget (str): The connection string for the target device
1265
+ or sub-device.
1266
+ ConType (str, optional): The connection type hint ('PY', 'QIS', 'QPS', etc.)
1267
+ used when creating the base quarchDevice instance if not a sub-device.
1268
+ Defaults to "PY". Note: For sub-devices, the controller connection
1269
+ currently defaults to "PY" internally based on original logic.
1270
+ timeout (str, optional): The connection timeout in seconds as a string.
1271
+ Defaults to "5".
1272
+
1273
+ Returns:
1274
+ quarchDevice | subDevice | Any: An instance representing the connected device.
1275
+ Type hinted as Any because subDevice type might vary.
1276
+
1277
+ Raises:
1278
+ ImportError: If quarchArray components are needed but not found.
1279
+ ValueError: If the connectionTarget format is invalid.
1280
+ ConnectionError: If connecting to the device or controller fails.
1281
+ RuntimeError: For other unexpected errors during connection/instantiation.
1282
+ """
1283
+ # Import quarchArray
551
1284
  from .quarchArray import quarchArray
552
- if connectionTarget.__contains__("<") and connectionTarget.__contains__(">"):
553
- connectionTarget, portNumber = connectionTarget.split("<")
554
- portNumber = portNumber[:-1]
555
- myDevice = quarchDevice(connectionTarget, ConType="PY", timeout="5")
556
- myArrayController = quarchArray(myDevice)
557
- mySubDevice = myArrayController.getSubDevice(portNumber)
558
- myDevice = mySubDevice
1285
+
1286
+ # Original check for sub-device format using __contains__
1287
+ if isinstance(connectionTarget, str) and connectionTarget.__contains__("<") and connectionTarget.__contains__(">"):
1288
+ logging.debug(f"Detected sub-device format for {connectionTarget}")
1289
+ myDevice = None # Ensure defined in this scope
1290
+ myArrayController = None # Ensure defined
1291
+ try:
1292
+ controller_target_str, portNumberPart = connectionTarget.split("<")
1293
+ portNumberStr = portNumberPart[:-1] # Remove '>'
1294
+
1295
+ # Validate port number
1296
+ if not portNumberStr.isdigit():
1297
+ raise ValueError(f"Invalid port number '{portNumberStr}' in sub-device string")
1298
+ portNumber = int(portNumberStr)
1299
+
1300
+ # Validate controller part using the wrapper function (internal call)
1301
+ if not check_module_format(controller_target_str):
1302
+ raise ValueError(f"Invalid controller part format: '{controller_target_str}'")
1303
+
1304
+ logging.debug(f"Connecting to controller '{controller_target_str}' first...")
1305
+ myDeviceBase = quarchDevice(controller_target_str, ConType="PY", timeout=timeout)
1306
+
1307
+ logging.debug("Wrapping controller device with quarchArray...")
1308
+ myArrayController = quarchArray(myDeviceBase)
1309
+
1310
+ logging.debug(f"Getting subDevice for port {portNumber}...")
1311
+ mySubDevice = myArrayController.getSubDevice(portNumber)
1312
+
1313
+ myDevice = mySubDevice # Return the subDevice instance
1314
+ logging.info(f"Successfully connected to sub-device: {connectionTarget}")
1315
+ except (ImportError, ValueError, ConnectionError, RuntimeError) as e_device_error:
1316
+ # Catch specific known errors and re-raise
1317
+ logging.error(f"Failed to get sub-device '{connectionTarget}': {e_device_error}", exc_info=True)
1318
+ raise # Re-raise the caught exception
1319
+ except Exception as e_device_error:
1320
+ # Catch any other unexpected errors
1321
+ logging.error(f"Unexpected error getting sub-device '{connectionTarget}': {e_device_error}", exc_info=True)
1322
+ # Wrap in RuntimeError
1323
+ raise RuntimeError(f"Unexpected error getting sub-device '{connectionTarget}'") from e_device_error
1324
+
559
1325
  else:
1326
+ # Standard device connection
1327
+ logging.debug(f"Standard device connection for: {connectionTarget}")
1328
+ # Use passed ConType and timeout
560
1329
  myDevice = quarchDevice(connectionTarget, ConType=ConType, timeout=timeout)
561
- return myDevice
1330
+ logging.info(f"Successfully connected to standard device: {connectionTarget}")
1331
+
1332
+ return myDevice
1333
+
1334
+
1335
+ # Original getQuarchDevice function, kept for compatibility, now calls snake_case version
1336
+ def getQuarchDevice(connectionTarget: str, ConType: str = "PY", timeout: str = "5") -> 'Union[quarchDevice, subDevice]':
1337
+ """
1338
+ DEPRECATED - Use get_quarch_device instead.
1339
+
1340
+ Creates and returns a quarchDevice or subDevice instance.
1341
+
1342
+ Parses the connectionTarget, determines if it's a standard device or a
1343
+ sub-device (e.g., "TYPE:ID<PORT>"), and instantiates the appropriate
1344
+ quarchDevice or subDevice object via the quarchArray class if needed.
1345
+
1346
+ Args:
1347
+ connectionTarget (str): The connection string for the target device
1348
+ or sub-device.
1349
+ ConType (str, optional): The connection type hint ('PY', 'QIS', 'QPS', etc.)
1350
+ used when creating the base quarchDevice instance if not a sub-device.
1351
+ Defaults to "PY". Note: For sub-devices, the controller connection
1352
+ currently defaults to "PY" internally based on original logic.
1353
+ timeout (str, optional): The connection timeout in seconds as a string.
1354
+ Defaults to "5".
1355
+
1356
+ Returns:
1357
+ quarchDevice | subDevice | Any: An instance representing the connected device.
1358
+ Type hinted as Any because subDevice type might vary.
1359
+
1360
+ Raises:
1361
+ ImportError: If quarchArray components are needed but not found.
1362
+ ValueError: If the connectionTarget format is invalid.
1363
+ ConnectionError: If connecting to the device or controller fails.
1364
+ RuntimeError: For other unexpected errors during connection/instantiation.
1365
+ """
1366
+ return get_quarch_device(connectionTarget, ConType, timeout)