nmarshall commited on
Commit
a9b587d
·
1 Parent(s): e392f6a

qvm: recover linked collision mask policy

Browse files
docs/FINDINGS.md CHANGED
@@ -1907,3 +1907,5 @@ RE-985: Rust owns an exact268-byte scratch slice and returns ordered zero/mode-c
1907
  RE-986: 90 original-QVM fixtures recover live/non-following client mask2 suppression. Forward/right command bytes clear; positive signed up input clears, while zero and negative up values survive. Buttons, angles, timestamp and adjacent low byte survive. The rewritten24-byte command is then copied into scratch and the client pointer bound. Dead clients, followers and absent mask2 bypass suppression. [Evidence](research/QVM_CLIENT_MOVE_SUPPRESSION.md).
1908
 
1909
  RE-987: Rust snapshots six raw command words after source-backed suppression, retaining negative up bytes and all unrelated command words. Ninety source/Rust fixtures compare both the mutated command and scratch copy. Unit cases cover signed byte boundaries, neighboring button preservation and dead/follow/other-mask bypasses. The typed return represents binding to the supplied client rather than a raw address. [Evidence](research/RUST_CLIENT_MOVE_SUPPRESSION.md).
 
 
 
1907
  RE-986: 90 original-QVM fixtures recover live/non-following client mask2 suppression. Forward/right command bytes clear; positive signed up input clears, while zero and negative up values survive. Buttons, angles, timestamp and adjacent low byte survive. The rewritten24-byte command is then copied into scratch and the client pointer bound. Dead clients, followers and absent mask2 bypass suppression. [Evidence](research/QVM_CLIENT_MOVE_SUPPRESSION.md).
1908
 
1909
  RE-987: Rust snapshots six raw command words after source-backed suppression, retaining negative up bytes and all unrelated command words. Ninety source/Rust fixtures compare both the mutated command and scratch copy. Unit cases cover signed byte boundaries, neighboring button preservation and dead/follow/other-mask bypasses. The typed return represents binding to the supplied client rather than a raw address. [Evidence](research/RUST_CLIENT_MOVE_SUPPRESSION.md).
1910
+
1911
+ RE-988: Forty source probes recover mask precedence and execute actual151954 overlap checks. Movement-type3 bypasses links and selects65537; overlapping live type0 linked entities select the same mask. Failed overlap clears both link words and selects33619969. Unlinked entity mask8 selects37814273 before mode9/nonzero client3704 selects67174401. The helper uses strict lower-X versus upper-X overlap, inclusive remaining comparisons, positive entity health and movement-type0 on both clients; boundary fixtures expose this asymmetry. [Evidence](research/QVM_CLIENT_MOVE_MASK.md).
docs/PROVISIONAL_TODO.md CHANGED
@@ -1963,3 +1963,5 @@ RE-974–983 completed routing, command rewrite, inactivity, movement-parameter
1963
  - [x] RE-986 Recover movement suppression and command snapshot ([evidence](research/QVM_CLIENT_MOVE_SUPPRESSION.md)).
1964
 
1965
  - [x] RE-987 Port signed movement suppression and snapshot ([evidence](research/RUST_CLIENT_MOVE_SUPPRESSION.md)).
 
 
 
1963
  - [x] RE-986 Recover movement suppression and command snapshot ([evidence](research/QVM_CLIENT_MOVE_SUPPRESSION.md)).
1964
 
1965
  - [x] RE-987 Port signed movement suppression and snapshot ([evidence](research/RUST_CLIENT_MOVE_SUPPRESSION.md)).
1966
+
1967
+ - [x] RE-988 Recover movement masks and linked overlap cleanup ([evidence](research/QVM_CLIENT_MOVE_MASK.md)).
docs/RESEARCH_LEDGER.md CHANGED
@@ -2623,3 +2623,7 @@ Rust owns an exact268-byte scratch slice and returns ordered zero/mode-callback
2623
  ## 2026-10-29 — RE-987 Port signed movement suppression and snapshot
2624
 
2625
  Rust snapshots six raw command words after source-backed suppression, retaining negative up bytes and all unrelated command words. Ninety source/Rust fixtures compare both the mutated command and scratch copy. Unit cases cover signed byte boundaries, neighboring button preservation and dead/follow/other-mask bypasses. The typed return represents binding to the supplied client rather than a raw address. Focused `cargo xtask test-group rust-client-move-suppression` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
 
 
 
 
 
2623
  ## 2026-10-29 — RE-987 Port signed movement suppression and snapshot
2624
 
2625
  Rust snapshots six raw command words after source-backed suppression, retaining negative up bytes and all unrelated command words. Ninety source/Rust fixtures compare both the mutated command and scratch copy. Unit cases cover signed byte boundaries, neighboring button preservation and dead/follow/other-mask bypasses. The typed return represents binding to the supplied client rather than a raw address. Focused `cargo xtask test-group rust-client-move-suppression` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
2626
+
2627
+ ## 2026-10-29 — RE-988 Recover movement masks and linked overlap cleanup
2628
+
2629
+ Forty source probes recover mask precedence and execute actual151954 overlap checks. Movement-type3 bypasses links and selects65537; overlapping live type0 linked entities select the same mask. Failed overlap clears both link words and selects33619969. Unlinked entity mask8 selects37814273 before mode9/nonzero client3704 selects67174401. The helper uses strict lower-X versus upper-X overlap, inclusive remaining comparisons, positive entity health and movement-type0 on both clients; boundary fixtures expose this asymmetry. Focused `cargo xtask test-group qvm-client-move-mask` passes with deterministic report regeneration and selected regressions. Full suite deferred to task ten. Original assets unchanged; Python uses the flake-declared Nix runtime.
docs/REVERSE_ENGINEERING_TODO.md CHANGED
@@ -2000,3 +2000,5 @@ RE-974–983 recover routing, command rewriting, inactivity and composed setup t
2000
  - [x] RE-986 Recover movement suppression and command snapshot ([evidence](research/QVM_CLIENT_MOVE_SUPPRESSION.md)).
2001
 
2002
  - [x] RE-987 Port signed movement suppression and snapshot ([evidence](research/RUST_CLIENT_MOVE_SUPPRESSION.md)).
 
 
 
2000
  - [x] RE-986 Recover movement suppression and command snapshot ([evidence](research/QVM_CLIENT_MOVE_SUPPRESSION.md)).
2001
 
2002
  - [x] RE-987 Port signed movement suppression and snapshot ([evidence](research/RUST_CLIENT_MOVE_SUPPRESSION.md)).
2003
+
2004
+ - [x] RE-988 Recover movement masks and linked overlap cleanup ([evidence](research/QVM_CLIENT_MOVE_MASK.md)).
docs/research/QVM_CLIENT_MOVE_MASK.md ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ # Recover movement masks and linked overlap cleanup
2
+
3
+ RE-988. Focused validation: `cargo xtask test-group qvm-client-move-mask`. [Machine report](qvm-client-move-mask.json).
4
+
5
+ Forty source probes recover mask precedence and execute actual151954 overlap checks. Movement-type3 bypasses links and selects65537; overlapping live type0 linked entities select the same mask. Failed overlap clears both link words and selects33619969. Unlinked entity mask8 selects37814273 before mode9/nonzero client3704 selects67174401. The helper uses strict lower-X versus upper-X overlap, inclusive remaining comparisons, positive entity health and movement-type0 on both clients; boundary fixtures expose this asymmetry.
docs/research/README.md CHANGED
@@ -1535,3 +1535,5 @@ The extension collector adds five focused tests for native tail calls, command-r
1535
  - [RE-986: Recover movement suppression and command snapshot](QVM_CLIENT_MOVE_SUPPRESSION.md).
1536
 
1537
  - [RE-987: Port signed movement suppression and snapshot](RUST_CLIENT_MOVE_SUPPRESSION.md).
 
 
 
1535
  - [RE-986: Recover movement suppression and command snapshot](QVM_CLIENT_MOVE_SUPPRESSION.md).
1536
 
1537
  - [RE-987: Port signed movement suppression and snapshot](RUST_CLIENT_MOVE_SUPPRESSION.md).
1538
+
1539
+ - [RE-988: Recover movement masks and linked overlap cleanup](QVM_CLIENT_MOVE_MASK.md).
docs/research/qvm-client-move-mask.json ADDED
@@ -0,0 +1,1145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "limits": "154664..154777 with actual151954 overlap helper. Finite axis-aligned entity boxes; no native traces or movement simulation.",
3
+ "probes": [
4
+ {
5
+ "execution": {
6
+ "stop": 154777,
7
+ "trace_length": 33,
8
+ "trace_sha256": "c3a75ef8469ed16f8858e513cd73e676ee35a3a0f73d83b8f4638167812df472"
9
+ },
10
+ "input": {
11
+ "entity_flags": 0,
12
+ "ghost": 0,
13
+ "linked": 0,
14
+ "mode": 0,
15
+ "name": "unlinked",
16
+ "origin": [
17
+ 0.0,
18
+ 0.0,
19
+ 0.0
20
+ ],
21
+ "other_health": 1,
22
+ "other_pm": 0,
23
+ "pm_type": 0,
24
+ "self_health": 1
25
+ },
26
+ "linked": false,
27
+ "mask": 33619969,
28
+ "other_linked": true,
29
+ "overlap_results": []
30
+ },
31
+ {
32
+ "execution": {
33
+ "stop": 154777,
34
+ "trace_length": 33,
35
+ "trace_sha256": "c3a75ef8469ed16f8858e513cd73e676ee35a3a0f73d83b8f4638167812df472"
36
+ },
37
+ "input": {
38
+ "entity_flags": 0,
39
+ "ghost": 1,
40
+ "linked": 0,
41
+ "mode": 0,
42
+ "name": "unlinked",
43
+ "origin": [
44
+ 0.0,
45
+ 0.0,
46
+ 0.0
47
+ ],
48
+ "other_health": 1,
49
+ "other_pm": 0,
50
+ "pm_type": 0,
51
+ "self_health": 1
52
+ },
53
+ "linked": false,
54
+ "mask": 33619969,
55
+ "other_linked": true,
56
+ "overlap_results": []
57
+ },
58
+ {
59
+ "execution": {
60
+ "stop": 154777,
61
+ "trace_length": 40,
62
+ "trace_sha256": "e53902d39caf83ac854d04140d49974f97b238ff5d38ff5450aa53e7eec171c9"
63
+ },
64
+ "input": {
65
+ "entity_flags": 0,
66
+ "ghost": 0,
67
+ "linked": 0,
68
+ "mode": 9,
69
+ "name": "unlinked",
70
+ "origin": [
71
+ 0.0,
72
+ 0.0,
73
+ 0.0
74
+ ],
75
+ "other_health": 1,
76
+ "other_pm": 0,
77
+ "pm_type": 0,
78
+ "self_health": 1
79
+ },
80
+ "linked": false,
81
+ "mask": 33619969,
82
+ "other_linked": true,
83
+ "overlap_results": []
84
+ },
85
+ {
86
+ "execution": {
87
+ "stop": 154777,
88
+ "trace_length": 42,
89
+ "trace_sha256": "2ffb51777216657bce4b46039c323cb793dfdc3b045b3bf5fd4fef3ae1a16532"
90
+ },
91
+ "input": {
92
+ "entity_flags": 0,
93
+ "ghost": 1,
94
+ "linked": 0,
95
+ "mode": 9,
96
+ "name": "unlinked",
97
+ "origin": [
98
+ 0.0,
99
+ 0.0,
100
+ 0.0
101
+ ],
102
+ "other_health": 1,
103
+ "other_pm": 0,
104
+ "pm_type": 0,
105
+ "self_health": 1
106
+ },
107
+ "linked": false,
108
+ "mask": 67174401,
109
+ "other_linked": true,
110
+ "overlap_results": []
111
+ },
112
+ {
113
+ "execution": {
114
+ "stop": 154777,
115
+ "trace_length": 31,
116
+ "trace_sha256": "639908003684d3f2e5c5b1fe8c90e306473e3e425bb67ad59728973b9e84dce9"
117
+ },
118
+ "input": {
119
+ "entity_flags": 8,
120
+ "ghost": 0,
121
+ "linked": 0,
122
+ "mode": 0,
123
+ "name": "unlinked",
124
+ "origin": [
125
+ 0.0,
126
+ 0.0,
127
+ 0.0
128
+ ],
129
+ "other_health": 1,
130
+ "other_pm": 0,
131
+ "pm_type": 0,
132
+ "self_health": 1
133
+ },
134
+ "linked": false,
135
+ "mask": 37814273,
136
+ "other_linked": true,
137
+ "overlap_results": []
138
+ },
139
+ {
140
+ "execution": {
141
+ "stop": 154777,
142
+ "trace_length": 31,
143
+ "trace_sha256": "639908003684d3f2e5c5b1fe8c90e306473e3e425bb67ad59728973b9e84dce9"
144
+ },
145
+ "input": {
146
+ "entity_flags": 8,
147
+ "ghost": 1,
148
+ "linked": 0,
149
+ "mode": 0,
150
+ "name": "unlinked",
151
+ "origin": [
152
+ 0.0,
153
+ 0.0,
154
+ 0.0
155
+ ],
156
+ "other_health": 1,
157
+ "other_pm": 0,
158
+ "pm_type": 0,
159
+ "self_health": 1
160
+ },
161
+ "linked": false,
162
+ "mask": 37814273,
163
+ "other_linked": true,
164
+ "overlap_results": []
165
+ },
166
+ {
167
+ "execution": {
168
+ "stop": 154777,
169
+ "trace_length": 31,
170
+ "trace_sha256": "639908003684d3f2e5c5b1fe8c90e306473e3e425bb67ad59728973b9e84dce9"
171
+ },
172
+ "input": {
173
+ "entity_flags": 8,
174
+ "ghost": 0,
175
+ "linked": 0,
176
+ "mode": 9,
177
+ "name": "unlinked",
178
+ "origin": [
179
+ 0.0,
180
+ 0.0,
181
+ 0.0
182
+ ],
183
+ "other_health": 1,
184
+ "other_pm": 0,
185
+ "pm_type": 0,
186
+ "self_health": 1
187
+ },
188
+ "linked": false,
189
+ "mask": 37814273,
190
+ "other_linked": true,
191
+ "overlap_results": []
192
+ },
193
+ {
194
+ "execution": {
195
+ "stop": 154777,
196
+ "trace_length": 31,
197
+ "trace_sha256": "639908003684d3f2e5c5b1fe8c90e306473e3e425bb67ad59728973b9e84dce9"
198
+ },
199
+ "input": {
200
+ "entity_flags": 8,
201
+ "ghost": 1,
202
+ "linked": 0,
203
+ "mode": 9,
204
+ "name": "unlinked",
205
+ "origin": [
206
+ 0.0,
207
+ 0.0,
208
+ 0.0
209
+ ],
210
+ "other_health": 1,
211
+ "other_pm": 0,
212
+ "pm_type": 0,
213
+ "self_health": 1
214
+ },
215
+ "linked": false,
216
+ "mask": 37814273,
217
+ "other_linked": true,
218
+ "overlap_results": []
219
+ },
220
+ {
221
+ "execution": {
222
+ "stop": 154777,
223
+ "trace_length": 12,
224
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
225
+ },
226
+ "input": {
227
+ "entity_flags": 0,
228
+ "ghost": 0,
229
+ "linked": 0,
230
+ "mode": 0,
231
+ "name": "unlinked",
232
+ "origin": [
233
+ 0.0,
234
+ 0.0,
235
+ 0.0
236
+ ],
237
+ "other_health": 1,
238
+ "other_pm": 0,
239
+ "pm_type": 3,
240
+ "self_health": 1
241
+ },
242
+ "linked": false,
243
+ "mask": 65537,
244
+ "other_linked": true,
245
+ "overlap_results": []
246
+ },
247
+ {
248
+ "execution": {
249
+ "stop": 154777,
250
+ "trace_length": 12,
251
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
252
+ },
253
+ "input": {
254
+ "entity_flags": 0,
255
+ "ghost": 1,
256
+ "linked": 0,
257
+ "mode": 0,
258
+ "name": "unlinked",
259
+ "origin": [
260
+ 0.0,
261
+ 0.0,
262
+ 0.0
263
+ ],
264
+ "other_health": 1,
265
+ "other_pm": 0,
266
+ "pm_type": 3,
267
+ "self_health": 1
268
+ },
269
+ "linked": false,
270
+ "mask": 65537,
271
+ "other_linked": true,
272
+ "overlap_results": []
273
+ },
274
+ {
275
+ "execution": {
276
+ "stop": 154777,
277
+ "trace_length": 12,
278
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
279
+ },
280
+ "input": {
281
+ "entity_flags": 0,
282
+ "ghost": 0,
283
+ "linked": 0,
284
+ "mode": 9,
285
+ "name": "unlinked",
286
+ "origin": [
287
+ 0.0,
288
+ 0.0,
289
+ 0.0
290
+ ],
291
+ "other_health": 1,
292
+ "other_pm": 0,
293
+ "pm_type": 3,
294
+ "self_health": 1
295
+ },
296
+ "linked": false,
297
+ "mask": 65537,
298
+ "other_linked": true,
299
+ "overlap_results": []
300
+ },
301
+ {
302
+ "execution": {
303
+ "stop": 154777,
304
+ "trace_length": 12,
305
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
306
+ },
307
+ "input": {
308
+ "entity_flags": 0,
309
+ "ghost": 1,
310
+ "linked": 0,
311
+ "mode": 9,
312
+ "name": "unlinked",
313
+ "origin": [
314
+ 0.0,
315
+ 0.0,
316
+ 0.0
317
+ ],
318
+ "other_health": 1,
319
+ "other_pm": 0,
320
+ "pm_type": 3,
321
+ "self_health": 1
322
+ },
323
+ "linked": false,
324
+ "mask": 65537,
325
+ "other_linked": true,
326
+ "overlap_results": []
327
+ },
328
+ {
329
+ "execution": {
330
+ "stop": 154777,
331
+ "trace_length": 12,
332
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
333
+ },
334
+ "input": {
335
+ "entity_flags": 8,
336
+ "ghost": 0,
337
+ "linked": 0,
338
+ "mode": 0,
339
+ "name": "unlinked",
340
+ "origin": [
341
+ 0.0,
342
+ 0.0,
343
+ 0.0
344
+ ],
345
+ "other_health": 1,
346
+ "other_pm": 0,
347
+ "pm_type": 3,
348
+ "self_health": 1
349
+ },
350
+ "linked": false,
351
+ "mask": 65537,
352
+ "other_linked": true,
353
+ "overlap_results": []
354
+ },
355
+ {
356
+ "execution": {
357
+ "stop": 154777,
358
+ "trace_length": 12,
359
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
360
+ },
361
+ "input": {
362
+ "entity_flags": 8,
363
+ "ghost": 1,
364
+ "linked": 0,
365
+ "mode": 0,
366
+ "name": "unlinked",
367
+ "origin": [
368
+ 0.0,
369
+ 0.0,
370
+ 0.0
371
+ ],
372
+ "other_health": 1,
373
+ "other_pm": 0,
374
+ "pm_type": 3,
375
+ "self_health": 1
376
+ },
377
+ "linked": false,
378
+ "mask": 65537,
379
+ "other_linked": true,
380
+ "overlap_results": []
381
+ },
382
+ {
383
+ "execution": {
384
+ "stop": 154777,
385
+ "trace_length": 12,
386
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
387
+ },
388
+ "input": {
389
+ "entity_flags": 8,
390
+ "ghost": 0,
391
+ "linked": 0,
392
+ "mode": 9,
393
+ "name": "unlinked",
394
+ "origin": [
395
+ 0.0,
396
+ 0.0,
397
+ 0.0
398
+ ],
399
+ "other_health": 1,
400
+ "other_pm": 0,
401
+ "pm_type": 3,
402
+ "self_health": 1
403
+ },
404
+ "linked": false,
405
+ "mask": 65537,
406
+ "other_linked": true,
407
+ "overlap_results": []
408
+ },
409
+ {
410
+ "execution": {
411
+ "stop": 154777,
412
+ "trace_length": 12,
413
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
414
+ },
415
+ "input": {
416
+ "entity_flags": 8,
417
+ "ghost": 1,
418
+ "linked": 0,
419
+ "mode": 9,
420
+ "name": "unlinked",
421
+ "origin": [
422
+ 0.0,
423
+ 0.0,
424
+ 0.0
425
+ ],
426
+ "other_health": 1,
427
+ "other_pm": 0,
428
+ "pm_type": 3,
429
+ "self_health": 1
430
+ },
431
+ "linked": false,
432
+ "mask": 65537,
433
+ "other_linked": true,
434
+ "overlap_results": []
435
+ },
436
+ {
437
+ "execution": {
438
+ "stop": 154777,
439
+ "trace_length": 46,
440
+ "trace_sha256": "c280a4bfe38145d80a3fb2cf1653ee78098b4efdf3f7ec5869de4a985a2bf6a3"
441
+ },
442
+ "input": {
443
+ "entity_flags": 8,
444
+ "ghost": 1,
445
+ "linked": 1,
446
+ "mode": 9,
447
+ "name": "overlap",
448
+ "origin": [
449
+ 0.0,
450
+ 0.0,
451
+ 0.0
452
+ ],
453
+ "other_health": 1,
454
+ "other_pm": 0,
455
+ "pm_type": 0,
456
+ "self_health": 1
457
+ },
458
+ "linked": true,
459
+ "mask": 65537,
460
+ "other_linked": true,
461
+ "overlap_results": [
462
+ 1
463
+ ]
464
+ },
465
+ {
466
+ "execution": {
467
+ "stop": 154777,
468
+ "trace_length": 12,
469
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
470
+ },
471
+ "input": {
472
+ "entity_flags": 8,
473
+ "ghost": 1,
474
+ "linked": 1,
475
+ "mode": 9,
476
+ "name": "overlap",
477
+ "origin": [
478
+ 0.0,
479
+ 0.0,
480
+ 0.0
481
+ ],
482
+ "other_health": 1,
483
+ "other_pm": 0,
484
+ "pm_type": 3,
485
+ "self_health": 1
486
+ },
487
+ "linked": true,
488
+ "mask": 65537,
489
+ "other_linked": true,
490
+ "overlap_results": []
491
+ },
492
+ {
493
+ "execution": {
494
+ "stop": 154777,
495
+ "trace_length": 70,
496
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
497
+ },
498
+ "input": {
499
+ "entity_flags": 8,
500
+ "ghost": 1,
501
+ "linked": 1,
502
+ "mode": 9,
503
+ "name": "x-touch",
504
+ "origin": [
505
+ 2.0,
506
+ 0.0,
507
+ 0.0
508
+ ],
509
+ "other_health": 1,
510
+ "other_pm": 0,
511
+ "pm_type": 0,
512
+ "self_health": 1
513
+ },
514
+ "linked": false,
515
+ "mask": 33619969,
516
+ "other_linked": false,
517
+ "overlap_results": [
518
+ 0
519
+ ]
520
+ },
521
+ {
522
+ "execution": {
523
+ "stop": 154777,
524
+ "trace_length": 12,
525
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
526
+ },
527
+ "input": {
528
+ "entity_flags": 8,
529
+ "ghost": 1,
530
+ "linked": 1,
531
+ "mode": 9,
532
+ "name": "x-touch",
533
+ "origin": [
534
+ 2.0,
535
+ 0.0,
536
+ 0.0
537
+ ],
538
+ "other_health": 1,
539
+ "other_pm": 0,
540
+ "pm_type": 3,
541
+ "self_health": 1
542
+ },
543
+ "linked": true,
544
+ "mask": 65537,
545
+ "other_linked": true,
546
+ "overlap_results": []
547
+ },
548
+ {
549
+ "execution": {
550
+ "stop": 154777,
551
+ "trace_length": 46,
552
+ "trace_sha256": "c280a4bfe38145d80a3fb2cf1653ee78098b4efdf3f7ec5869de4a985a2bf6a3"
553
+ },
554
+ "input": {
555
+ "entity_flags": 8,
556
+ "ghost": 1,
557
+ "linked": 1,
558
+ "mode": 9,
559
+ "name": "x-left-touch",
560
+ "origin": [
561
+ -2.0,
562
+ 0.0,
563
+ 0.0
564
+ ],
565
+ "other_health": 1,
566
+ "other_pm": 0,
567
+ "pm_type": 0,
568
+ "self_health": 1
569
+ },
570
+ "linked": true,
571
+ "mask": 65537,
572
+ "other_linked": true,
573
+ "overlap_results": [
574
+ 1
575
+ ]
576
+ },
577
+ {
578
+ "execution": {
579
+ "stop": 154777,
580
+ "trace_length": 12,
581
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
582
+ },
583
+ "input": {
584
+ "entity_flags": 8,
585
+ "ghost": 1,
586
+ "linked": 1,
587
+ "mode": 9,
588
+ "name": "x-left-touch",
589
+ "origin": [
590
+ -2.0,
591
+ 0.0,
592
+ 0.0
593
+ ],
594
+ "other_health": 1,
595
+ "other_pm": 0,
596
+ "pm_type": 3,
597
+ "self_health": 1
598
+ },
599
+ "linked": true,
600
+ "mask": 65537,
601
+ "other_linked": true,
602
+ "overlap_results": []
603
+ },
604
+ {
605
+ "execution": {
606
+ "stop": 154777,
607
+ "trace_length": 46,
608
+ "trace_sha256": "c280a4bfe38145d80a3fb2cf1653ee78098b4efdf3f7ec5869de4a985a2bf6a3"
609
+ },
610
+ "input": {
611
+ "entity_flags": 8,
612
+ "ghost": 1,
613
+ "linked": 1,
614
+ "mode": 9,
615
+ "name": "y-touch",
616
+ "origin": [
617
+ 0.0,
618
+ 2.0,
619
+ 0.0
620
+ ],
621
+ "other_health": 1,
622
+ "other_pm": 0,
623
+ "pm_type": 0,
624
+ "self_health": 1
625
+ },
626
+ "linked": true,
627
+ "mask": 65537,
628
+ "other_linked": true,
629
+ "overlap_results": [
630
+ 1
631
+ ]
632
+ },
633
+ {
634
+ "execution": {
635
+ "stop": 154777,
636
+ "trace_length": 12,
637
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
638
+ },
639
+ "input": {
640
+ "entity_flags": 8,
641
+ "ghost": 1,
642
+ "linked": 1,
643
+ "mode": 9,
644
+ "name": "y-touch",
645
+ "origin": [
646
+ 0.0,
647
+ 2.0,
648
+ 0.0
649
+ ],
650
+ "other_health": 1,
651
+ "other_pm": 0,
652
+ "pm_type": 3,
653
+ "self_health": 1
654
+ },
655
+ "linked": true,
656
+ "mask": 65537,
657
+ "other_linked": true,
658
+ "overlap_results": []
659
+ },
660
+ {
661
+ "execution": {
662
+ "stop": 154777,
663
+ "trace_length": 46,
664
+ "trace_sha256": "c280a4bfe38145d80a3fb2cf1653ee78098b4efdf3f7ec5869de4a985a2bf6a3"
665
+ },
666
+ "input": {
667
+ "entity_flags": 8,
668
+ "ghost": 1,
669
+ "linked": 1,
670
+ "mode": 9,
671
+ "name": "z-touch",
672
+ "origin": [
673
+ 0.0,
674
+ 0.0,
675
+ 2.0
676
+ ],
677
+ "other_health": 1,
678
+ "other_pm": 0,
679
+ "pm_type": 0,
680
+ "self_health": 1
681
+ },
682
+ "linked": true,
683
+ "mask": 65537,
684
+ "other_linked": true,
685
+ "overlap_results": [
686
+ 1
687
+ ]
688
+ },
689
+ {
690
+ "execution": {
691
+ "stop": 154777,
692
+ "trace_length": 12,
693
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
694
+ },
695
+ "input": {
696
+ "entity_flags": 8,
697
+ "ghost": 1,
698
+ "linked": 1,
699
+ "mode": 9,
700
+ "name": "z-touch",
701
+ "origin": [
702
+ 0.0,
703
+ 0.0,
704
+ 2.0
705
+ ],
706
+ "other_health": 1,
707
+ "other_pm": 0,
708
+ "pm_type": 3,
709
+ "self_health": 1
710
+ },
711
+ "linked": true,
712
+ "mask": 65537,
713
+ "other_linked": true,
714
+ "overlap_results": []
715
+ },
716
+ {
717
+ "execution": {
718
+ "stop": 154777,
719
+ "trace_length": 70,
720
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
721
+ },
722
+ "input": {
723
+ "entity_flags": 8,
724
+ "ghost": 1,
725
+ "linked": 1,
726
+ "mode": 9,
727
+ "name": "separated-x",
728
+ "origin": [
729
+ 3.0,
730
+ 0.0,
731
+ 0.0
732
+ ],
733
+ "other_health": 1,
734
+ "other_pm": 0,
735
+ "pm_type": 0,
736
+ "self_health": 1
737
+ },
738
+ "linked": false,
739
+ "mask": 33619969,
740
+ "other_linked": false,
741
+ "overlap_results": [
742
+ 0
743
+ ]
744
+ },
745
+ {
746
+ "execution": {
747
+ "stop": 154777,
748
+ "trace_length": 12,
749
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
750
+ },
751
+ "input": {
752
+ "entity_flags": 8,
753
+ "ghost": 1,
754
+ "linked": 1,
755
+ "mode": 9,
756
+ "name": "separated-x",
757
+ "origin": [
758
+ 3.0,
759
+ 0.0,
760
+ 0.0
761
+ ],
762
+ "other_health": 1,
763
+ "other_pm": 0,
764
+ "pm_type": 3,
765
+ "self_health": 1
766
+ },
767
+ "linked": true,
768
+ "mask": 65537,
769
+ "other_linked": true,
770
+ "overlap_results": []
771
+ },
772
+ {
773
+ "execution": {
774
+ "stop": 154777,
775
+ "trace_length": 70,
776
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
777
+ },
778
+ "input": {
779
+ "entity_flags": 8,
780
+ "ghost": 1,
781
+ "linked": 1,
782
+ "mode": 9,
783
+ "name": "separated-y",
784
+ "origin": [
785
+ 0.0,
786
+ 3.0,
787
+ 0.0
788
+ ],
789
+ "other_health": 1,
790
+ "other_pm": 0,
791
+ "pm_type": 0,
792
+ "self_health": 1
793
+ },
794
+ "linked": false,
795
+ "mask": 33619969,
796
+ "other_linked": false,
797
+ "overlap_results": [
798
+ 0
799
+ ]
800
+ },
801
+ {
802
+ "execution": {
803
+ "stop": 154777,
804
+ "trace_length": 12,
805
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
806
+ },
807
+ "input": {
808
+ "entity_flags": 8,
809
+ "ghost": 1,
810
+ "linked": 1,
811
+ "mode": 9,
812
+ "name": "separated-y",
813
+ "origin": [
814
+ 0.0,
815
+ 3.0,
816
+ 0.0
817
+ ],
818
+ "other_health": 1,
819
+ "other_pm": 0,
820
+ "pm_type": 3,
821
+ "self_health": 1
822
+ },
823
+ "linked": true,
824
+ "mask": 65537,
825
+ "other_linked": true,
826
+ "overlap_results": []
827
+ },
828
+ {
829
+ "execution": {
830
+ "stop": 154777,
831
+ "trace_length": 70,
832
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
833
+ },
834
+ "input": {
835
+ "entity_flags": 8,
836
+ "ghost": 1,
837
+ "linked": 1,
838
+ "mode": 9,
839
+ "name": "separated-z",
840
+ "origin": [
841
+ 0.0,
842
+ 0.0,
843
+ 3.0
844
+ ],
845
+ "other_health": 1,
846
+ "other_pm": 0,
847
+ "pm_type": 0,
848
+ "self_health": 1
849
+ },
850
+ "linked": false,
851
+ "mask": 33619969,
852
+ "other_linked": false,
853
+ "overlap_results": [
854
+ 0
855
+ ]
856
+ },
857
+ {
858
+ "execution": {
859
+ "stop": 154777,
860
+ "trace_length": 12,
861
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
862
+ },
863
+ "input": {
864
+ "entity_flags": 8,
865
+ "ghost": 1,
866
+ "linked": 1,
867
+ "mode": 9,
868
+ "name": "separated-z",
869
+ "origin": [
870
+ 0.0,
871
+ 0.0,
872
+ 3.0
873
+ ],
874
+ "other_health": 1,
875
+ "other_pm": 0,
876
+ "pm_type": 3,
877
+ "self_health": 1
878
+ },
879
+ "linked": true,
880
+ "mask": 65537,
881
+ "other_linked": true,
882
+ "overlap_results": []
883
+ },
884
+ {
885
+ "execution": {
886
+ "stop": 154777,
887
+ "trace_length": 70,
888
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
889
+ },
890
+ "input": {
891
+ "entity_flags": 8,
892
+ "ghost": 1,
893
+ "linked": 1,
894
+ "mode": 9,
895
+ "name": "other-dead",
896
+ "origin": [
897
+ 0.0,
898
+ 0.0,
899
+ 0.0
900
+ ],
901
+ "other_health": 0,
902
+ "other_pm": 0,
903
+ "pm_type": 0,
904
+ "self_health": 1
905
+ },
906
+ "linked": false,
907
+ "mask": 33619969,
908
+ "other_linked": false,
909
+ "overlap_results": [
910
+ 0
911
+ ]
912
+ },
913
+ {
914
+ "execution": {
915
+ "stop": 154777,
916
+ "trace_length": 12,
917
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
918
+ },
919
+ "input": {
920
+ "entity_flags": 8,
921
+ "ghost": 1,
922
+ "linked": 1,
923
+ "mode": 9,
924
+ "name": "other-dead",
925
+ "origin": [
926
+ 0.0,
927
+ 0.0,
928
+ 0.0
929
+ ],
930
+ "other_health": 0,
931
+ "other_pm": 0,
932
+ "pm_type": 3,
933
+ "self_health": 1
934
+ },
935
+ "linked": true,
936
+ "mask": 65537,
937
+ "other_linked": true,
938
+ "overlap_results": []
939
+ },
940
+ {
941
+ "execution": {
942
+ "stop": 154777,
943
+ "trace_length": 70,
944
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
945
+ },
946
+ "input": {
947
+ "entity_flags": 8,
948
+ "ghost": 1,
949
+ "linked": 1,
950
+ "mode": 9,
951
+ "name": "self-dead",
952
+ "origin": [
953
+ 0.0,
954
+ 0.0,
955
+ 0.0
956
+ ],
957
+ "other_health": 1,
958
+ "other_pm": 0,
959
+ "pm_type": 0,
960
+ "self_health": 0
961
+ },
962
+ "linked": false,
963
+ "mask": 33619969,
964
+ "other_linked": false,
965
+ "overlap_results": [
966
+ 0
967
+ ]
968
+ },
969
+ {
970
+ "execution": {
971
+ "stop": 154777,
972
+ "trace_length": 12,
973
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
974
+ },
975
+ "input": {
976
+ "entity_flags": 8,
977
+ "ghost": 1,
978
+ "linked": 1,
979
+ "mode": 9,
980
+ "name": "self-dead",
981
+ "origin": [
982
+ 0.0,
983
+ 0.0,
984
+ 0.0
985
+ ],
986
+ "other_health": 1,
987
+ "other_pm": 0,
988
+ "pm_type": 3,
989
+ "self_health": 0
990
+ },
991
+ "linked": true,
992
+ "mask": 65537,
993
+ "other_linked": true,
994
+ "overlap_results": []
995
+ },
996
+ {
997
+ "execution": {
998
+ "stop": 154777,
999
+ "trace_length": 70,
1000
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
1001
+ },
1002
+ "input": {
1003
+ "entity_flags": 8,
1004
+ "ghost": 1,
1005
+ "linked": 1,
1006
+ "mode": 9,
1007
+ "name": "other-pm",
1008
+ "origin": [
1009
+ 0.0,
1010
+ 0.0,
1011
+ 0.0
1012
+ ],
1013
+ "other_health": 1,
1014
+ "other_pm": 1,
1015
+ "pm_type": 0,
1016
+ "self_health": 1
1017
+ },
1018
+ "linked": false,
1019
+ "mask": 33619969,
1020
+ "other_linked": false,
1021
+ "overlap_results": [
1022
+ 0
1023
+ ]
1024
+ },
1025
+ {
1026
+ "execution": {
1027
+ "stop": 154777,
1028
+ "trace_length": 12,
1029
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
1030
+ },
1031
+ "input": {
1032
+ "entity_flags": 8,
1033
+ "ghost": 1,
1034
+ "linked": 1,
1035
+ "mode": 9,
1036
+ "name": "other-pm",
1037
+ "origin": [
1038
+ 0.0,
1039
+ 0.0,
1040
+ 0.0
1041
+ ],
1042
+ "other_health": 1,
1043
+ "other_pm": 1,
1044
+ "pm_type": 3,
1045
+ "self_health": 1
1046
+ },
1047
+ "linked": true,
1048
+ "mask": 65537,
1049
+ "other_linked": true,
1050
+ "overlap_results": []
1051
+ },
1052
+ {
1053
+ "execution": {
1054
+ "stop": 154777,
1055
+ "trace_length": 70,
1056
+ "trace_sha256": "de79da707d8fb6ab3387568b7dfd3dcfe69375b673d304104815a45b6a5aa6b6"
1057
+ },
1058
+ "input": {
1059
+ "entity_flags": 8,
1060
+ "ghost": 1,
1061
+ "linked": 1,
1062
+ "mode": 9,
1063
+ "name": "other-negative-health",
1064
+ "origin": [
1065
+ 0.0,
1066
+ 0.0,
1067
+ 0.0
1068
+ ],
1069
+ "other_health": 4294967295,
1070
+ "other_pm": 0,
1071
+ "pm_type": 0,
1072
+ "self_health": 1
1073
+ },
1074
+ "linked": false,
1075
+ "mask": 33619969,
1076
+ "other_linked": false,
1077
+ "overlap_results": [
1078
+ 0
1079
+ ]
1080
+ },
1081
+ {
1082
+ "execution": {
1083
+ "stop": 154777,
1084
+ "trace_length": 12,
1085
+ "trace_sha256": "8def5fd70edf9f6f35f3894c5a99a86b16ee7c982f03e8687bf845ba8a68b362"
1086
+ },
1087
+ "input": {
1088
+ "entity_flags": 8,
1089
+ "ghost": 1,
1090
+ "linked": 1,
1091
+ "mode": 9,
1092
+ "name": "other-negative-health",
1093
+ "origin": [
1094
+ 0.0,
1095
+ 0.0,
1096
+ 0.0
1097
+ ],
1098
+ "other_health": 4294967295,
1099
+ "other_pm": 0,
1100
+ "pm_type": 3,
1101
+ "self_health": 1
1102
+ },
1103
+ "linked": true,
1104
+ "mask": 65537,
1105
+ "other_linked": true,
1106
+ "overlap_results": []
1107
+ }
1108
+ ],
1109
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1110
+ "source": {
1111
+ "archive": "zUrT43_qvm.pk3",
1112
+ "archive_sha256": "b59bf0c5bedf11d50e0edd220da7eade96de40601e98ae14c54c819047df0796",
1113
+ "member": {
1114
+ "bytes": 983300,
1115
+ "comment_hex": "",
1116
+ "compressed_bytes": 246560,
1117
+ "compression": 8,
1118
+ "crc32": "98ea1768",
1119
+ "create_system": 0,
1120
+ "create_version": 63,
1121
+ "date_time": [
1122
+ 2018,
1123
+ 6,
1124
+ 18,
1125
+ 22,
1126
+ 11,
1127
+ 50
1128
+ ],
1129
+ "directory": false,
1130
+ "entry_index": 2,
1131
+ "external_attr": 32,
1132
+ "extra_hex": "0a0020000000000001001800d1e24e974007d40116dcbf962f1fd20116dcbf962f1fd201",
1133
+ "extract_version": 20,
1134
+ "flags": 0,
1135
+ "header_offset": 221309,
1136
+ "internal_attr": 0,
1137
+ "occurrence": 0,
1138
+ "output": "assets/extracted/zUrT43_qvm.pk3/members/000002/vm/qagame.qvm",
1139
+ "path": "vm/qagame.qvm",
1140
+ "sha256": "a589351dfe517470a1b121dd2164714987d9e4577bf00c6486e1540035d7a79d",
1141
+ "type": "member",
1142
+ "volume": 0
1143
+ }
1144
+ }
1145
+ }
scripts/analyze_qvm_client_move_mask.py ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """Verified original movement-context source contract."""
2
+ from pathlib import Path
3
+ from analyze_qvm import write_json
4
+ from qvm_research_support import source
5
+ from qvm_client_move_context_support import seed,mask,mask_fixtures
6
+
7
+ def main():
8
+ q,raw,h,ins=source();probes=[]
9
+ for a in mask_fixtures():
10
+ m,b=seed(raw,h,a);m,p,b=mask(ins,m,b,a);p['input']=a;probes.append(p)
11
+ write_json(Path('docs/research/qvm-client-move-mask.json'),dict(source=q['source'],sha256=q['sha256'],probes=probes,limits='154664..154777 with actual151954 overlap helper. Finite axis-aligned entity boxes; no native traces or movement simulation.'))
12
+ if __name__=='__main__':main()
scripts/qvm_client_move_context_oracle.py CHANGED
@@ -8,3 +8,16 @@ def suppression(a):
8
  if 0<a['health']<0x80000000 and not a['follow'] and a['flags']&2:
9
  u=(command[5]>>24)&255;command[5]=(command[5]&255)|((u if u>=128 else 0)<<24)
10
  return dict(command=command,copied=command,client_bound=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  if 0<a['health']<0x80000000 and not a['follow'] and a['flags']&2:
9
  u=(command[5]>>24)&255;command[5]=(command[5]&255)|((u if u>=128 else 0)<<24)
10
  return dict(command=command,copied=command,client_bound=True)
11
+
12
+ def mask(a):
13
+ linked=bool(a['linked']);other=True;results=[]
14
+ if a['pm_type']==3:mask=65537
15
+ elif linked:
16
+ o=a['origin'];overlap=(a['other_pm']==0 and a['pm_type']==0 and 0<a['other_health']<0x80000000 and 0<a['self_health']<0x80000000 and o[0]-1<1 and o[1]-1<=1 and o[2]-1<=1 and o[0]+1>=-1 and o[1]+1>=-1 and o[2]+1>=-1)
17
+ results=[int(overlap)]
18
+ if overlap:mask=65537
19
+ else:mask=33619969;linked=False;other=False
20
+ elif a['entity_flags']&8:mask=37814273
21
+ elif a['mode']==9 and a['ghost']:mask=67174401
22
+ else:mask=33619969
23
+ return dict(mask=mask,linked=linked,other_linked=other,overlap_results=results)
scripts/qvm_client_move_context_support.py CHANGED
@@ -44,3 +44,36 @@ def suppression_view(m,b):
44
  def suppression(ins,m,b,a):
45
  suppression_seed(m,b,a);m,e,b=execute(ins,m,b,154579,154664)
46
  return m,dict(**suppression_view(m,b),execution={k:e[k] for k in ['stop','trace_length','trace_sha256']}),b
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  def suppression(ins,m,b,a):
45
  suppression_seed(m,b,a);m,e,b=execute(ins,m,b,154579,154664)
46
  return m,dict(**suppression_view(m,b),execution={k:e[k] for k in ['stop','trace_length','trace_sha256']}),b
47
+
48
+ from qvm_camera_world_support import POOL,run
49
+ from qvm_exit_rules_support import CPOOL
50
+ from analyze_qvm_acceleration import word
51
+ OTHER=POOL+880*3
52
+ OTHER_CLIENT=CPOOL+6336*3
53
+
54
+ def mask_fixtures():
55
+ from itertools import product
56
+ rows=[dict(name='unlinked',pm_type=pm,linked=0,entity_flags=ef,mode=mode,ghost=ghost,other_pm=0,other_health=1,self_health=1,origin=[0.,0.,0.]) for pm,ef,mode,ghost in product([0,3],[0,8],[0,9],[0,1])]
57
+ profiles=[('overlap',{}),('x-touch',dict(origin=[2.,0.,0.])),('x-left-touch',dict(origin=[-2.,0.,0.])),('y-touch',dict(origin=[0.,2.,0.])),('z-touch',dict(origin=[0.,0.,2.])),('separated-x',dict(origin=[3.,0.,0.])),('separated-y',dict(origin=[0.,3.,0.])),('separated-z',dict(origin=[0.,0.,3.])),('other-dead',dict(other_health=0)),('self-dead',dict(self_health=0)),('other-pm',dict(other_pm=1)),('other-negative-health',dict(other_health=0xffffffff))]
58
+ defaults=dict(linked=1,entity_flags=8,mode=9,ghost=1,other_pm=0,other_health=1,self_health=1,origin=[0.,0.,0.])
59
+ rows += [dict(defaults,**changes,name=name,pm_type=pm) for name,changes in profiles for pm in [0,3]]
60
+ return rows
61
+
62
+ def mask_seed(m,b,a):
63
+ m.update({ROOT+56:CLIENT,ROOT+52:CLIENT,CLIENT+4:a['pm_type'],CLIENT+4396:OTHER if a['linked'] else 0,ENTITY+424:a['entity_flags'],34090788:a['mode'],CLIENT+3704:a['ghost'],OTHER+520:OTHER_CLIENT,OTHER_CLIENT+4396:ENTITY,OTHER_CLIENT+4:a['other_pm'],OTHER+684:a['other_health'],ENTITY+684:a['self_health']})
64
+ for entity,origin in [(ENTITY,[0.,0.,0.]),(OTHER,a['origin'])]:
65
+ for j in range(3):m[entity+488+4*j]=word(origin[j]);m[entity+436+4*j]=word(-1.);m[entity+448+4*j]=word(1.)
66
+
67
+ def mask_handlers(results):
68
+ def overlap(i,m,a,bs):
69
+ assert a[8]==ENTITY and a[12]==OTHER
70
+ m,v,p,b=run(i,m,151954,152219,64,{8:ENTITY,12:OTHER},dict(bs),base=ROOT+0x40000)
71
+ results.append(v&0xffffffff)
72
+ return m,v,{'actual_source_child':151954,'trace_sha256':p['execution']['trace_sha256']}
73
+ return {151954:overlap}
74
+
75
+ def mask_view(m,results):return dict(mask=m[ROOT+84]&0xffffffff,linked=bool(m[CLIENT+4396]),other_linked=bool(m[OTHER_CLIENT+4396]),overlap_results=results)
76
+
77
+ def mask(ins,m,b,a):
78
+ mask_seed(m,b,a);results=[];m,e,b=execute(ins,m,b,154664,154777,mask_handlers(results))
79
+ return m,dict(**mask_view(m,results),execution={k:e[k] for k in ['stop','trace_length','trace_sha256']}),b
scripts/test_qvm_client_move_mask.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import json,unittest
2
+ from pathlib import Path
3
+ from qvm_client_move_context_oracle import mask
4
+ class OriginalTests(unittest.TestCase):
5
+ def test_original_contract(self):
6
+ rows=json.loads(Path('docs/research/qvm-client-move-mask.json').read_text())['probes'];self.assertEqual(len(rows),40)
7
+ for p in rows:
8
+ with self.subTest(input=p['input']):
9
+ for k,v in mask(p['input']).items():self.assertEqual(p[k],v,k)
10
+ def test_fixture_identity_and_trace(self):
11
+ r=json.loads(Path('docs/research/qvm-client-move-mask.json').read_text());self.assertEqual(len(r['sha256']),64)
12
+ self.assertTrue(all(p['execution']['trace_length']>0 for p in r['probes']))
13
+ if __name__=='__main__':unittest.main()
xtask/checks.tsv CHANGED
@@ -3728,3 +3728,7 @@ edge crates/urt-gameplay/src/client_processing.rs scripts/analyze_rust_client_mo
3728
  edge crates/urt-gameplay/src/bin/urt-client-processing.rs scripts/analyze_rust_client_move_suppression.py
3729
  edge crates/urt-gameplay/src/client_move_context.rs scripts/analyze_rust_client_move_suppression.py
3730
  edge crates/urt-gameplay/src/bin/urt-client-move-context.rs scripts/analyze_rust_client_move_suppression.py
 
 
 
 
 
3728
  edge crates/urt-gameplay/src/bin/urt-client-processing.rs scripts/analyze_rust_client_move_suppression.py
3729
  edge crates/urt-gameplay/src/client_move_context.rs scripts/analyze_rust_client_move_suppression.py
3730
  edge crates/urt-gameplay/src/bin/urt-client-move-context.rs scripts/analyze_rust_client_move_suppression.py
3731
+ report scripts/analyze_qvm_client_move_mask.py docs/research/qvm-client-move-mask.json
3732
+ edge docs/research/qvm-client-move-mask.json scripts/test_qvm_client_move_mask.py
3733
+ group qvm-client-move-mask scripts/analyze_qvm_client_move_mask.py
3734
+ edge scripts/analyze_qvm_client_move_mask.py scripts/analyze_qvm_resumer_audit.py