crosshair-tool 0.0.95__cp311-cp311-macosx_11_0_arm64.whl → 0.0.97__cp311-cp311-macosx_11_0_arm64.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.
Potentially problematic release.
This version of crosshair-tool might be problematic. Click here for more details.
- _crosshair_tracers.cpython-311-darwin.so +0 -0
- crosshair/__init__.py +1 -1
- crosshair/_tracers_test.py +5 -5
- crosshair/codeconfig.py +3 -2
- crosshair/condition_parser.py +1 -0
- crosshair/condition_parser_test.py +0 -2
- crosshair/core.py +8 -9
- crosshair/core_test.py +2 -3
- crosshair/diff_behavior_test.py +0 -2
- crosshair/dynamic_typing.py +3 -3
- crosshair/enforce.py +1 -0
- crosshair/examples/check_examples_test.py +1 -0
- crosshair/fnutil.py +2 -3
- crosshair/fnutil_test.py +1 -4
- crosshair/fuzz_core_test.py +9 -1
- crosshair/libimpl/arraylib.py +1 -1
- crosshair/libimpl/builtinslib.py +77 -24
- crosshair/libimpl/builtinslib_ch_test.py +15 -5
- crosshair/libimpl/builtinslib_test.py +38 -1
- crosshair/libimpl/collectionslib_test.py +4 -4
- crosshair/libimpl/datetimelib.py +1 -3
- crosshair/libimpl/datetimelib_ch_test.py +5 -5
- crosshair/libimpl/encodings/_encutil.py +11 -6
- crosshair/libimpl/functoolslib.py +8 -2
- crosshair/libimpl/functoolslib_test.py +22 -6
- crosshair/libimpl/relib.py +1 -1
- crosshair/libimpl/unicodedatalib_test.py +3 -3
- crosshair/main.py +5 -3
- crosshair/opcode_intercept.py +45 -17
- crosshair/path_cover.py +5 -1
- crosshair/pathing_oracle.py +40 -3
- crosshair/pathing_oracle_test.py +21 -0
- crosshair/register_contract.py +1 -0
- crosshair/register_contract_test.py +2 -4
- crosshair/simplestructs.py +10 -8
- crosshair/statespace.py +74 -19
- crosshair/statespace_test.py +16 -0
- crosshair/tools/generate_demo_table.py +2 -2
- crosshair/tracers.py +8 -6
- crosshair/util.py +6 -6
- {crosshair_tool-0.0.95.dist-info → crosshair_tool-0.0.97.dist-info}/METADATA +4 -5
- {crosshair_tool-0.0.95.dist-info → crosshair_tool-0.0.97.dist-info}/RECORD +46 -45
- {crosshair_tool-0.0.95.dist-info → crosshair_tool-0.0.97.dist-info}/WHEEL +0 -0
- {crosshair_tool-0.0.95.dist-info → crosshair_tool-0.0.97.dist-info}/entry_points.txt +0 -0
- {crosshair_tool-0.0.95.dist-info → crosshair_tool-0.0.97.dist-info}/licenses/LICENSE +0 -0
- {crosshair_tool-0.0.95.dist-info → crosshair_tool-0.0.97.dist-info}/top_level.txt +0 -0
crosshair/statespace.py
CHANGED
|
@@ -46,7 +46,7 @@ from crosshair.util import (
|
|
|
46
46
|
in_debug,
|
|
47
47
|
name_of_type,
|
|
48
48
|
)
|
|
49
|
-
from crosshair.z3util import z3Aassert, z3Not, z3PopNot
|
|
49
|
+
from crosshair.z3util import z3Aassert, z3Not, z3Or, z3PopNot
|
|
50
50
|
|
|
51
51
|
|
|
52
52
|
@functools.total_ordering
|
|
@@ -219,7 +219,7 @@ class StateSpaceCounter(Counter):
|
|
|
219
219
|
|
|
220
220
|
|
|
221
221
|
class AbstractPathingOracle:
|
|
222
|
-
def pre_path_hook(self,
|
|
222
|
+
def pre_path_hook(self, space: "StateSpace") -> None:
|
|
223
223
|
pass
|
|
224
224
|
|
|
225
225
|
def post_path_hook(self, path: Sequence["SearchTreeNode"]) -> None:
|
|
@@ -350,6 +350,7 @@ def solver_is_sat(solver, *exprs) -> bool:
|
|
|
350
350
|
ret = solver.check(*exprs)
|
|
351
351
|
if ret == z3.unknown:
|
|
352
352
|
debug("Z3 Unknown satisfiability. Reason:", solver.reason_unknown())
|
|
353
|
+
debug("Call stack at time of unknown sat:", ch_stack())
|
|
353
354
|
if solver.reason_unknown() == "interrupted from keyboard":
|
|
354
355
|
raise KeyboardInterrupt
|
|
355
356
|
if exprs:
|
|
@@ -427,7 +428,7 @@ class RootNode(SinglePathNode):
|
|
|
427
428
|
)
|
|
428
429
|
from crosshair.pathing_oracle import CoveragePathingOracle # circular import
|
|
429
430
|
|
|
430
|
-
self.pathing_oracle = CoveragePathingOracle()
|
|
431
|
+
self.pathing_oracle: AbstractPathingOracle = CoveragePathingOracle()
|
|
431
432
|
self.iteration = 0
|
|
432
433
|
|
|
433
434
|
|
|
@@ -704,6 +705,17 @@ def debug_path_tree(node, highlights, prefix="") -> List[str]:
|
|
|
704
705
|
return [f"{prefix} -> {str(node)} {node.stats()}"]
|
|
705
706
|
|
|
706
707
|
|
|
708
|
+
def make_default_solver() -> z3.Solver:
|
|
709
|
+
"""Create a new solver with default settings."""
|
|
710
|
+
smt_tactic = z3.Tactic("smt")
|
|
711
|
+
solver = smt_tactic.solver()
|
|
712
|
+
solver.set("mbqi", True)
|
|
713
|
+
# turn off every randomization thing we can think of:
|
|
714
|
+
solver.set("random-seed", 42)
|
|
715
|
+
solver.set("smt.random-seed", 42)
|
|
716
|
+
return solver
|
|
717
|
+
|
|
718
|
+
|
|
707
719
|
class StateSpace:
|
|
708
720
|
"""Holds various information about the SMT solver's current state."""
|
|
709
721
|
|
|
@@ -717,18 +729,12 @@ class StateSpace:
|
|
|
717
729
|
model_check_timeout: float,
|
|
718
730
|
search_root: RootNode,
|
|
719
731
|
):
|
|
720
|
-
|
|
721
|
-
self.solver = smt_tactic.solver()
|
|
732
|
+
self.solver = make_default_solver()
|
|
722
733
|
if model_check_timeout < 1 << 63:
|
|
723
734
|
self.smt_timeout: Optional[int] = int(model_check_timeout * 1000 + 1)
|
|
724
735
|
self.solver.set(timeout=self.smt_timeout)
|
|
725
736
|
else:
|
|
726
737
|
self.smt_timeout = None
|
|
727
|
-
self.solver.set(mbqi=True)
|
|
728
|
-
# turn off every randomization thing we can think of:
|
|
729
|
-
self.solver.set("random-seed", 42)
|
|
730
|
-
self.solver.set("smt.random-seed", 42)
|
|
731
|
-
# self.solver.set('randomize', False)
|
|
732
738
|
self.choices_made: List[SearchTreeNode] = []
|
|
733
739
|
self.status_cap: Optional[VerificationStatus] = None
|
|
734
740
|
self.heaps: List[List[Tuple[z3.ExprRef, Type, object]]] = [[]]
|
|
@@ -745,7 +751,7 @@ class StateSpace:
|
|
|
745
751
|
self._deferred_assumptions = []
|
|
746
752
|
assert search_root.iteration is not None
|
|
747
753
|
search_root.iteration += 1
|
|
748
|
-
search_root.pathing_oracle.pre_path_hook(
|
|
754
|
+
search_root.pathing_oracle.pre_path_hook(self)
|
|
749
755
|
|
|
750
756
|
def add(self, expr) -> None:
|
|
751
757
|
with NoTracing():
|
|
@@ -1012,7 +1018,7 @@ class StateSpace:
|
|
|
1012
1018
|
) -> object:
|
|
1013
1019
|
with NoTracing():
|
|
1014
1020
|
# TODO: needs more testing
|
|
1015
|
-
for
|
|
1021
|
+
for curref, curtyp, curval in self.heaps[snapshot]:
|
|
1016
1022
|
|
|
1017
1023
|
# TODO: using unify() is almost certainly wrong; just because the types
|
|
1018
1024
|
# have some instances in common does not mean that `curval` actually
|
|
@@ -1049,6 +1055,51 @@ class StateSpace:
|
|
|
1049
1055
|
self.next_uniq += 1
|
|
1050
1056
|
return "_{:x}".format(self.next_uniq)
|
|
1051
1057
|
|
|
1058
|
+
@assert_tracing(False)
|
|
1059
|
+
def smt_fanout(
|
|
1060
|
+
self,
|
|
1061
|
+
exprs_and_results: Sequence[Tuple[z3.ExprRef, object]],
|
|
1062
|
+
desc: str,
|
|
1063
|
+
weights: Optional[Sequence[float]] = None,
|
|
1064
|
+
none_of_the_above_weight: float = 0.0,
|
|
1065
|
+
):
|
|
1066
|
+
"""Performs a weighted binary search over the given SMT expressions."""
|
|
1067
|
+
exprs = [e for (e, _) in exprs_and_results]
|
|
1068
|
+
final_weights = [1.0] * len(exprs) if weights is None else weights
|
|
1069
|
+
if CROSSHAIR_EXTRA_ASSERTS:
|
|
1070
|
+
if len(final_weights) != len(exprs):
|
|
1071
|
+
raise CrossHairInternal("inconsistent smt_fanout exprs and weights")
|
|
1072
|
+
if not all(0 < w for w in final_weights):
|
|
1073
|
+
raise CrossHairInternal("smt_fanout weights must be greater than zero")
|
|
1074
|
+
if not self.is_possible(z3Or(*exprs)):
|
|
1075
|
+
raise CrossHairInternal(
|
|
1076
|
+
"no smt_fanout option is possible: " + repr(exprs)
|
|
1077
|
+
)
|
|
1078
|
+
if self.is_possible(z3Not(z3Or(*exprs))):
|
|
1079
|
+
raise CrossHairInternal(
|
|
1080
|
+
"smt_fanout options are not exhaustive: " + repr(exprs)
|
|
1081
|
+
)
|
|
1082
|
+
|
|
1083
|
+
def attempt(start: int, end: int):
|
|
1084
|
+
size = end - start
|
|
1085
|
+
if size == 1:
|
|
1086
|
+
return exprs_and_results[start][1]
|
|
1087
|
+
mid = (start + end) // 2
|
|
1088
|
+
left_exprs = exprs[start:mid]
|
|
1089
|
+
left_weight = sum(final_weights[start:mid])
|
|
1090
|
+
right_weight = sum(final_weights[mid:end])
|
|
1091
|
+
if self.smt_fork(
|
|
1092
|
+
z3Or(*left_exprs),
|
|
1093
|
+
probability_true=left_weight / (left_weight + right_weight),
|
|
1094
|
+
desc=f"{desc}_fan_size_{size}",
|
|
1095
|
+
):
|
|
1096
|
+
return attempt(start, mid)
|
|
1097
|
+
else:
|
|
1098
|
+
return attempt(mid, end)
|
|
1099
|
+
|
|
1100
|
+
return attempt(0, len(exprs))
|
|
1101
|
+
|
|
1102
|
+
@assert_tracing(False)
|
|
1052
1103
|
def smt_fork(
|
|
1053
1104
|
self,
|
|
1054
1105
|
expr: Optional[z3.ExprRef] = None,
|
|
@@ -1062,6 +1113,14 @@ class StateSpace:
|
|
|
1062
1113
|
def defer_assumption(self, description: str, checker: Callable[[], bool]) -> None:
|
|
1063
1114
|
self._deferred_assumptions.append((description, checker))
|
|
1064
1115
|
|
|
1116
|
+
def extend_timeouts(
|
|
1117
|
+
self, constant_factor: float = 0.0, smt_multiple: Optional[float] = None
|
|
1118
|
+
) -> None:
|
|
1119
|
+
self.execution_deadline += constant_factor
|
|
1120
|
+
if self.smt_timeout is not None and smt_multiple is not None:
|
|
1121
|
+
self.smt_timeout = int(self.smt_timeout * smt_multiple)
|
|
1122
|
+
self.solver.set(timeout=self.smt_timeout)
|
|
1123
|
+
|
|
1065
1124
|
def detach_path(self, currently_handling: Optional[BaseException] = None) -> None:
|
|
1066
1125
|
"""
|
|
1067
1126
|
Mark the current path exhausted.
|
|
@@ -1075,13 +1134,9 @@ class StateSpace:
|
|
|
1075
1134
|
if self.is_detached:
|
|
1076
1135
|
debug("Path is already detached")
|
|
1077
1136
|
return
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
self.execution_deadline += 4.0
|
|
1082
|
-
if self.smt_timeout is not None:
|
|
1083
|
-
self.smt_timeout = self.smt_timeout * 2
|
|
1084
|
-
self.solver.set(timeout=self.smt_timeout)
|
|
1137
|
+
# Give ourselves a time extension for deferred assumptions and
|
|
1138
|
+
# (likely) counterexample generation to follow.
|
|
1139
|
+
self.extend_timeouts(constant_factor=4.0, smt_multiple=2.0)
|
|
1085
1140
|
for description, checker in self._deferred_assumptions:
|
|
1086
1141
|
with ResumedTracing():
|
|
1087
1142
|
check_ret = checker()
|
crosshair/statespace_test.py
CHANGED
|
@@ -81,3 +81,19 @@ def test_model_value_to_python_AlgebraicNumRef():
|
|
|
81
81
|
rt2 = z3.simplify(z3.Sqrt(2))
|
|
82
82
|
assert type(rt2) == z3.AlgebraicNumRef
|
|
83
83
|
model_value_to_python(rt2)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
def test_smt_fanout(space: SimpleStateSpace):
|
|
87
|
+
option1 = z3.Bool("option1")
|
|
88
|
+
option2 = z3.Bool("option2")
|
|
89
|
+
space.add(z3.Xor(option1, option2)) # Ensure exactly one option can be set
|
|
90
|
+
exprs_and_results = [(option1, "result1"), (option2, "result2")]
|
|
91
|
+
|
|
92
|
+
result = space.smt_fanout(exprs_and_results, desc="choose_one")
|
|
93
|
+
assert result in ("result1", "result2")
|
|
94
|
+
if result == "result1":
|
|
95
|
+
assert space.is_possible(option1)
|
|
96
|
+
assert not space.is_possible(option2)
|
|
97
|
+
else:
|
|
98
|
+
assert not space.is_possible(option1)
|
|
99
|
+
assert space.is_possible(option2)
|
|
@@ -107,7 +107,7 @@ def divide_stdlib_module(
|
|
|
107
107
|
modulename: str, items: list[tuple[str, str, str]]
|
|
108
108
|
) -> dict[str, list[tuple[str, str, str]]]:
|
|
109
109
|
ret = defaultdict(list)
|
|
110
|
-
for
|
|
110
|
+
for name, color, src in items:
|
|
111
111
|
if name.endswith("_method"):
|
|
112
112
|
name = name.removesuffix("_method")
|
|
113
113
|
(classname, methodname) = name.split("_", 1)
|
|
@@ -120,7 +120,7 @@ def divide_stdlib_module(
|
|
|
120
120
|
|
|
121
121
|
|
|
122
122
|
stdlib = {}
|
|
123
|
-
for
|
|
123
|
+
for modulename, items in stdlib_demos().items():
|
|
124
124
|
stdlib[modulename] = divide_stdlib_module(modulename, items)
|
|
125
125
|
|
|
126
126
|
|
crosshair/tracers.py
CHANGED
|
@@ -156,12 +156,14 @@ _CALL_HANDLERS: Dict[int, Callable[[object], CallStackInfo]] = {
|
|
|
156
156
|
CALL_KW: handle_call_kw,
|
|
157
157
|
CALL_FUNCTION: handle_call_function,
|
|
158
158
|
CALL_FUNCTION_KW: handle_call_function_kw,
|
|
159
|
-
CALL_FUNCTION_EX:
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
159
|
+
CALL_FUNCTION_EX: (
|
|
160
|
+
handle_call_function_ex_3_14
|
|
161
|
+
if sys.version_info >= (3, 14)
|
|
162
|
+
else (
|
|
163
|
+
handle_call_function_ex_3_13
|
|
164
|
+
if sys.version_info >= (3, 13)
|
|
165
|
+
else handle_call_function_ex_3_6
|
|
166
|
+
)
|
|
165
167
|
),
|
|
166
168
|
CALL_METHOD: handle_call_method,
|
|
167
169
|
}
|
crosshair/util.py
CHANGED
|
@@ -368,7 +368,7 @@ def format_boundargs_as_dictionary(bound_args: BoundArguments) -> str:
|
|
|
368
368
|
|
|
369
369
|
def format_boundargs(bound_args: BoundArguments) -> str:
|
|
370
370
|
arg_strings: List[str] = []
|
|
371
|
-
for
|
|
371
|
+
for name, param in bound_args.signature.parameters.items():
|
|
372
372
|
param_kind = param.kind
|
|
373
373
|
vals = bound_args.arguments.get(name, param.default)
|
|
374
374
|
if param_kind == Parameter.VAR_POSITIONAL:
|
|
@@ -503,9 +503,9 @@ class EvalFriendlyReprContext:
|
|
|
503
503
|
oid = id(obj)
|
|
504
504
|
typ = type(obj)
|
|
505
505
|
if obj in instance_overrides:
|
|
506
|
-
repr_fn: Callable[
|
|
507
|
-
[
|
|
508
|
-
|
|
506
|
+
repr_fn: Callable[[Any], Union[str, ReferencedIdentifier]] = (
|
|
507
|
+
instance_overrides[obj]
|
|
508
|
+
)
|
|
509
509
|
elif typ == float:
|
|
510
510
|
if math.isfinite(obj):
|
|
511
511
|
repr_fn = repr
|
|
@@ -543,7 +543,7 @@ class EvalFriendlyReprContext:
|
|
|
543
543
|
counts = collections.Counter(re.compile(r"\b_ch_efr_\d+_\b").findall(output))
|
|
544
544
|
assignment_remaps = {}
|
|
545
545
|
nextvarnum = 1
|
|
546
|
-
for
|
|
546
|
+
for varname, count in counts.items():
|
|
547
547
|
if count > 1:
|
|
548
548
|
assignment_remaps[varname + ":="] = f"v{nextvarnum}:="
|
|
549
549
|
assignment_remaps[varname] = f"v{nextvarnum}"
|
|
@@ -625,7 +625,7 @@ class DynamicScopeVar(Generic[_T]):
|
|
|
625
625
|
|
|
626
626
|
class AttributeHolder:
|
|
627
627
|
def __init__(self, attrs: Mapping[str, object]):
|
|
628
|
-
for
|
|
628
|
+
for k, v in attrs.items():
|
|
629
629
|
self.__dict__[k] = v
|
|
630
630
|
|
|
631
631
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: crosshair-tool
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.97
|
|
4
4
|
Summary: Analyze Python code for correctness using symbolic execution.
|
|
5
5
|
Home-page: https://github.com/pschanely/CrossHair
|
|
6
6
|
Author: Phillip Schanely
|
|
@@ -8,7 +8,6 @@ Author-email: pschanely+vE7F@gmail.com
|
|
|
8
8
|
License: MIT
|
|
9
9
|
Classifier: Development Status :: 3 - Alpha
|
|
10
10
|
Classifier: Intended Audience :: Developers
|
|
11
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
12
11
|
Classifier: Operating System :: OS Independent
|
|
13
12
|
Classifier: Programming Language :: Python :: 3
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.8
|
|
@@ -32,14 +31,14 @@ Requires-Dist: pygls>=1.0.0
|
|
|
32
31
|
Requires-Dist: typeshed-client>=2.0.5
|
|
33
32
|
Provides-Extra: dev
|
|
34
33
|
Requires-Dist: autodocsumm<1,>=0.2.2; extra == "dev"
|
|
35
|
-
Requires-Dist: black==
|
|
34
|
+
Requires-Dist: black==25.9.0; extra == "dev"
|
|
36
35
|
Requires-Dist: deal>=4.13.0; extra == "dev"
|
|
37
36
|
Requires-Dist: icontract>=2.4.0; extra == "dev"
|
|
38
37
|
Requires-Dist: isort==5.11.5; extra == "dev"
|
|
39
|
-
Requires-Dist: mypy==
|
|
38
|
+
Requires-Dist: mypy==1.18.1; extra == "dev"
|
|
40
39
|
Requires-Dist: numpy==1.23.4; python_version < "3.12" and extra == "dev"
|
|
41
40
|
Requires-Dist: numpy==1.26.0; (python_version >= "3.12" and python_version < "3.13") and extra == "dev"
|
|
42
|
-
Requires-Dist: numpy==2.
|
|
41
|
+
Requires-Dist: numpy==2.3.3; python_version >= "3.13" and extra == "dev"
|
|
43
42
|
Requires-Dist: pre-commit~=2.20; extra == "dev"
|
|
44
43
|
Requires-Dist: pytest; extra == "dev"
|
|
45
44
|
Requires-Dist: pytest-xdist; extra == "dev"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
_crosshair_tracers.cpython-311-darwin.so,sha256=
|
|
1
|
+
_crosshair_tracers.cpython-311-darwin.so,sha256=b3Gar170Y_1jAMQfaC43M7OMH9bQw9N-ZxzkLm1Iesk,57048
|
|
2
2
|
crosshair/_tracers_pycompat.h,sha256=6IYnbQxrYkhBsLDAHSX25DPOwo1oYHCZUVWZ8c7YCnQ,14356
|
|
3
3
|
crosshair/pure_importer.py,sha256=-t4eowrZOQmfqK1N2tjI5POoaxRGavytwMmbRivelFg,878
|
|
4
4
|
crosshair/options.py,sha256=htQNgnrpoRjSNq6rfLBAF8nos-NNIwmP6tQYyI8ugsM,6775
|
|
@@ -6,77 +6,78 @@ crosshair/lsp_server_test.py,sha256=7LO1Qqxkper3Xt2krgOlGqF1O_uDObo76o4FZbIqykY,
|
|
|
6
6
|
crosshair/conftest.py,sha256=BkLszApkdy6FrvzaHO7xh8_BJrG9AfytFTse-HuQVvg,653
|
|
7
7
|
crosshair/copyext_test.py,sha256=uJzdC9m2FqMjqQ-ITFoP0MZg3OCiO8paU-d533KocD8,2108
|
|
8
8
|
crosshair/objectproxy.py,sha256=1cO_ApA0AKPfCRu6MIsxUOKUUEGn0b1U4IHxTC4nDGI,9790
|
|
9
|
+
crosshair/pathing_oracle_test.py,sha256=6k9-8kAbTFUvxhEKSE5NPntEW2qMWkQi4zac_U1kYxY,725
|
|
9
10
|
crosshair/objectproxy_test.py,sha256=UJuO_jUt8_OEUtgQWyhlekPOdvtM8IQ5M9I_1AqXPWM,1081
|
|
10
11
|
crosshair/stubs_parser.py,sha256=rlBTQus5BlZ3Ygg6Xzk5dbQbDtRpv6w9i2HQmGrPVmc,14240
|
|
11
12
|
crosshair/_preliminaries_test.py,sha256=r2PohNNMfIkDqsnvI6gKlJTbwBaZA9NQJueQfJMN2Eo,504
|
|
12
13
|
crosshair/dynamic_typing_test.py,sha256=8p4NOJ6i9q9mozgCYlZP3VCs-TFMDaE_7W-TyNEse4o,5907
|
|
13
|
-
crosshair/enforce.py,sha256=
|
|
14
|
+
crosshair/enforce.py,sha256=YVze7uYfR_bM1jUvDlU-8cF4cphRRfe78exNZ1xXtuI,10011
|
|
14
15
|
crosshair/path_search_test.py,sha256=7cqzAMXUYAtA00mq9XR5AaZChqeQyXyCfuuv53_51pk,1692
|
|
15
|
-
crosshair/condition_parser.py,sha256=
|
|
16
|
-
crosshair/util.py,sha256=
|
|
17
|
-
crosshair/dynamic_typing.py,sha256=
|
|
18
|
-
crosshair/register_contract.py,sha256=
|
|
19
|
-
crosshair/tracers.py,sha256=
|
|
16
|
+
crosshair/condition_parser.py,sha256=C7S_IogPTDSB-NPGRgJ_CzuWF9YCzGsm6mc37VBo6lY,42684
|
|
17
|
+
crosshair/util.py,sha256=pfBTBNhqMuaoUvAaFZal4LqVEMzWlzmcobHTxp_ZrlE,22214
|
|
18
|
+
crosshair/dynamic_typing.py,sha256=JMcEX5HMMm9u0_lLtZI1jrAw9HGZqXyq8IYGQP4KYSc,12752
|
|
19
|
+
crosshair/register_contract.py,sha256=4p99KAUhu1k-OctIT6WX2YFbVaMCV6BDEULNvQFONGE,10387
|
|
20
|
+
crosshair/tracers.py,sha256=UX-JKKjggQ0_EDh0AGNf4b_2ku9SD9pWgRyFcJDAVpc,17179
|
|
20
21
|
crosshair/_tracers.h,sha256=QFBklLqMWmIpUzBIn_A4SKdpjwHs-N7ttx-F5jtWWCQ,2174
|
|
21
22
|
crosshair/type_repo.py,sha256=x_eK-YlcHv_dxDKy6m7ty0zNO6y058o3r6QJ55RcG3s,4664
|
|
22
|
-
crosshair/fnutil.py,sha256=
|
|
23
|
+
crosshair/fnutil.py,sha256=Xs0xJPcQm0z3tWQDjd_I-ainWHTxcT61dv8A3CY3--8,13109
|
|
23
24
|
crosshair/unicode_categories.py,sha256=g4pnUPanx8KkpwI06ZUGx8GR8Myruf_EpTjyti_V4z8,333519
|
|
24
25
|
crosshair/copyext.py,sha256=GBGQP9YAHoezLXwb_M59Hh1VXSou5EQt4ZmmUA0T_og,4899
|
|
25
|
-
crosshair/_tracers_test.py,sha256=
|
|
26
|
-
crosshair/__init__.py,sha256=
|
|
27
|
-
crosshair/core.py,sha256=
|
|
28
|
-
crosshair/path_cover.py,sha256=
|
|
26
|
+
crosshair/_tracers_test.py,sha256=7rrK0djASmRAlWcH4SiJqrWN7hk3oB_rYwhUG4gjxm4,3645
|
|
27
|
+
crosshair/__init__.py,sha256=7ph2S2-0_w1V5foTkyDqlkF63lSBFZ_QR10iQNgoKH0,936
|
|
28
|
+
crosshair/core.py,sha256=HqelePQQYES9SS36qR9mGEEeKcvEFrIHGg-8OG5i-Kg,64252
|
|
29
|
+
crosshair/path_cover.py,sha256=TCofZ9D5q7hpEIOnifp53BvY_YyPpZZC-heZw_NuTOQ,6838
|
|
29
30
|
crosshair/enforce_test.py,sha256=C6CQ4P1FjkdIJeJg3aJynp1iLDCE6BFCEVtSqXbvmQk,4665
|
|
30
31
|
crosshair/test_util.py,sha256=D9-f-DdzJemfAUkQL0cwKxPL8RZ-5gkVmghyRcKlBJI,10367
|
|
31
|
-
crosshair/core_test.py,sha256=
|
|
32
|
-
crosshair/codeconfig.py,sha256=
|
|
32
|
+
crosshair/core_test.py,sha256=P-r-qzHPZ2yLmSBZByYPccJZfxYi2ZCwn9o1mEfzRe8,33019
|
|
33
|
+
crosshair/codeconfig.py,sha256=TaIdOKxykpk6YeTtO_Xwsa3IDBTP6g3UGkFBt0PTDR4,3959
|
|
33
34
|
crosshair/util_test.py,sha256=_KTQ0O4cLhF1pAeB8Y8Cyqbd0UyZf5KxJUaiA-ew-tE,4676
|
|
34
35
|
crosshair/watcher_test.py,sha256=Ef1YSwy68wWPR5nPjwvEKPqxltI9pE9lTbnesmDy3Bk,2764
|
|
35
36
|
crosshair/auditwall.py,sha256=sqOmfXQLgmGfWS7b8SmVv66eFM2owaGn-4Ppq453VLI,5138
|
|
36
37
|
crosshair/simplestructs_test.py,sha256=6uDdrSISHLhwnFuESkR8mUGw7m1llM6vCNDFChkfSs8,8639
|
|
37
38
|
crosshair/z3util_test.py,sha256=CZovn4S9mYcG_yQegcxm80VHrvUdvNei0gvGTF9TOrk,173
|
|
38
39
|
crosshair/diff_behavior.py,sha256=_5X_pTN0_-rSPrh8dfpODJG_phFMn7fWc-_zLgO3UTk,11253
|
|
39
|
-
crosshair/condition_parser_test.py,sha256=
|
|
40
|
+
crosshair/condition_parser_test.py,sha256=UcgxzqrBLUMScif_RrgHvrhjzWx1KUPgAQOEmfJw7lc,15500
|
|
40
41
|
crosshair/pure_importer_test.py,sha256=Xjtlwn1mj7g-6VA87lrvzfUADCjlmn1wgHtbrnc0uuY,421
|
|
41
|
-
crosshair/fnutil_test.py,sha256=
|
|
42
|
+
crosshair/fnutil_test.py,sha256=cLHJ9uhQf797sTxuh4BGgQ0Fo5rcQFStkiPbzQPhIXA,2091
|
|
42
43
|
crosshair/stubs_parser_test.py,sha256=0itTT0Udul_51RJXNv6KB97z44gYze6NZfKJL7yIDzA,1228
|
|
43
44
|
crosshair/options_test.py,sha256=lzA-XtwEwQPa4wV1wwhCRKhyLOvIhThU9WK5QRaRbxQ,379
|
|
44
45
|
crosshair/patch_equivalence_test.py,sha256=eoLaGRvrR9nGUO_ybZ9XsWhs5ejC4IEPd0k-ihG3Nsg,2580
|
|
45
46
|
crosshair/abcstring.py,sha256=ROU8LzS7kfEU2L_D3QfhVxIjrYr1VctwUWfylC7KlCc,6549
|
|
46
47
|
crosshair/_mark_stacks.h,sha256=j86qubOUvVhoR19d74iQ084RrTEq8M6oT4wJsGQUySY,28678
|
|
47
|
-
crosshair/fuzz_core_test.py,sha256=
|
|
48
|
+
crosshair/fuzz_core_test.py,sha256=bLzdHBROzX3P3cfBeDTY9bJbfhe-CCoeLOF4Mt31wm0,17443
|
|
48
49
|
crosshair/unicode_categories_test.py,sha256=ZAU37IDGm9PDvwy_CGFcrF9Waa8JuUNdI4aq74wkB6c,739
|
|
49
|
-
crosshair/statespace_test.py,sha256=
|
|
50
|
+
crosshair/statespace_test.py,sha256=Eq7LNpjradHyCoCKU91Fxmo9DUpK2Mk4PyxxiAEp-Yk,3211
|
|
50
51
|
crosshair/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
51
52
|
crosshair/lsp_server.py,sha256=j7SX4pdVwa2MrtkNIjajLilzl5CZTY6PrBQsa26cdNo,8670
|
|
52
53
|
crosshair/path_search.py,sha256=wwZjp-3E4dENnJa6BlnSq8FARkIx0PyUYc7kvH32A2k,5588
|
|
53
54
|
crosshair/auditwall_test.py,sha256=VPcw_OW3nl3BkOZY4wEEtVDyTamdgqD4IjRccI2p5vI,2030
|
|
54
55
|
crosshair/smtlib_test.py,sha256=edzEn19u2YYHxSzG9RrMiu2HTiEexAuehC3IlG9LuJM,511
|
|
55
|
-
crosshair/register_contract_test.py,sha256=
|
|
56
|
-
crosshair/statespace.py,sha256=
|
|
56
|
+
crosshair/register_contract_test.py,sha256=9AWv9psiAredvcOlK2_pBpsgwIgBbecWyKEEvWiWBSI,4954
|
|
57
|
+
crosshair/statespace.py,sha256=D0Bptt3KMPG8RDzq_numy51sK1Pu_6QqcGKGfXC37s8,43440
|
|
57
58
|
crosshair/opcode_intercept_test.py,sha256=Si3rJQR5cs5d4uB8uwE2K8MjP8rE1a4yHkjXzhfS10A,9241
|
|
58
59
|
crosshair/main_test.py,sha256=2xpgNqog__XcYffGcwPeEEmr0Vy4EgVZE8GCAjQnE8U,14834
|
|
59
60
|
crosshair/codeconfig_test.py,sha256=RnC-RnNpr6If4eHmOepDZ33MCmfyhup08dzHKCm5xWA,3350
|
|
60
61
|
crosshair/watcher.py,sha256=kCCMlLe2KhW5MbEbMmixNRjRAvu5CypIAGd1V_YZ9QM,10048
|
|
61
62
|
crosshair/test_util_test.py,sha256=_r8DtAI5b1Yn1ruv9o51FWHmARII3-WDkWWnnY1iaAw,943
|
|
62
|
-
crosshair/opcode_intercept.py,sha256=
|
|
63
|
-
crosshair/simplestructs.py,sha256=
|
|
63
|
+
crosshair/opcode_intercept.py,sha256=atmnEDG9oDP0zlkGjJRAsYhD0Aw_PORf4coZZz2JgWw,23060
|
|
64
|
+
crosshair/simplestructs.py,sha256=O236XDO0dWGM59jktMUp5RG9xYY5iqZV219DknKAXgc,34283
|
|
64
65
|
crosshair/tracers_test.py,sha256=EBK_ZCy2MsxqmEaGjo0uw9zAztW9O6fhCW_0PJxyTS8,3270
|
|
65
66
|
crosshair/smtlib.py,sha256=hh-P32KHoH9BCq3oDYGp2PfOeOb8CwDj8tTkgqroLD8,689
|
|
66
|
-
crosshair/main.py,sha256=
|
|
67
|
+
crosshair/main.py,sha256=CY3PBcis302n0KvqoyDDoqtthNL4XASXHssO1I7DkJM,34707
|
|
67
68
|
crosshair/path_cover_test.py,sha256=U46zw4-m7yAXhu8-3Xnhvf-_9Ov5ivfCAm5euGwpRFA,4089
|
|
68
69
|
crosshair/__main__.py,sha256=zw9Ylf8v2fGocE57o4FqvD0lc7U4Ld2GbeCGxRWrpqo,252
|
|
69
|
-
crosshair/pathing_oracle.py,sha256=
|
|
70
|
-
crosshair/diff_behavior_test.py,sha256=
|
|
70
|
+
crosshair/pathing_oracle.py,sha256=qa-_OlyuCHpNHkK5xN8OvxRgOEOA56VpGf0jUIR8L-M,10513
|
|
71
|
+
crosshair/diff_behavior_test.py,sha256=nCpzOjrw0qsYgVhD2iCvKiNAt82SrfUWxWS5mPSE73w,7215
|
|
71
72
|
crosshair/core_and_libs.py,sha256=8FGL62GnyX6WHOqKh0rqJ0aJ_He5pwZm_zwPXTaPqhI,3963
|
|
72
73
|
crosshair/core_regestered_types_test.py,sha256=er3ianvu-l0RS-WrS46jmOWr4Jq06Cec9htAXGXJSNg,2099
|
|
73
74
|
crosshair/z3util.py,sha256=AkslxCSfzgSni6oWXUckWihWn3LuceQycR0X3D3ZhD8,1759
|
|
74
|
-
crosshair/tools/generate_demo_table.py,sha256=
|
|
75
|
+
crosshair/tools/generate_demo_table.py,sha256=Z8gPUPQM8G_szPTgagBYzvsQeWDEEhGoZCU0z5FAS3E,3827
|
|
75
76
|
crosshair/tools/check_help_in_doc.py,sha256=P21AH3mYrTVuBgWD6v65YXqBqmqpQDUTQeoZ10rB6TU,8235
|
|
76
77
|
crosshair/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
77
78
|
crosshair/tools/check_init_and_setup_coincide.py,sha256=kv61bXqKSKF_5J-kLNEhCrCPyszg7iZQWDu_Scnec98,3502
|
|
78
79
|
crosshair/examples/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
79
|
-
crosshair/examples/check_examples_test.py,sha256=
|
|
80
|
+
crosshair/examples/check_examples_test.py,sha256=ieB2KBBPReQBOr5-AZCgrVyhN1YXGYyQMjHyQBQ4zTI,4063
|
|
80
81
|
crosshair/examples/deal/__init__.py,sha256=Jp9ZnHBCuRzkgP8OIgEWWOzQiC0jLIYPd-rCqF5Xyrg,32
|
|
81
82
|
crosshair/examples/PEP316/__init__.py,sha256=LdmvJx2cbzC3iip3NwtT0Ds2v99l3KXl1q9Kc0TmCWE,34
|
|
82
83
|
crosshair/examples/PEP316/correct_code/chess.py,sha256=w29qVe-1oKMaHgZYhqyp2vQghXm2oohruFENljoVBCY,2081
|
|
@@ -105,22 +106,22 @@ crosshair/libimpl/unicodedatalib.py,sha256=q5LoCaEbHJrUwVWtUrlS3n_X21yp15xTS42l-
|
|
|
105
106
|
crosshair/libimpl/datetimelib_test.py,sha256=v9Cg512AXIGy7_dsN2y_ZD7W7fqfSSz07eiCUZukM60,2659
|
|
106
107
|
crosshair/libimpl/heapqlib_test.py,sha256=NdwTihD0xGy4qIDaS5a9-t3q437rP47GNdtceEBquNA,537
|
|
107
108
|
crosshair/libimpl/binascii_test.py,sha256=LOBqLAJ77Kx8vorjVTaT3X0Z93zw4P5BvwUapMCiSLg,1970
|
|
108
|
-
crosshair/libimpl/collectionslib_test.py,sha256=
|
|
109
|
+
crosshair/libimpl/collectionslib_test.py,sha256=0qmCRQbxfX8vMZLaok1GS68NIocR--RyTVVDqbtHalU,9185
|
|
109
110
|
crosshair/libimpl/timelib.py,sha256=MXEFOZjFGa1-yLvmB3l3DFTLF9PSluOlmRK-ZJaA_oI,2409
|
|
110
111
|
crosshair/libimpl/jsonlib_test.py,sha256=U40WJf-69dtflz75sIsl5zA3IV5R6Ltc4Z9jv_Fh-Fw,1382
|
|
111
|
-
crosshair/libimpl/builtinslib.py,sha256=
|
|
112
|
+
crosshair/libimpl/builtinslib.py,sha256=R6w3t-i1uJ3U8R-qHtrktZRTFm_K4SD0LjfeWBZbBDw,173362
|
|
112
113
|
crosshair/libimpl/mathlib_test.py,sha256=QShLCXHdv3tx5PQxcSoR0MHeZ1huaiV6d3u7C2mGOn4,1861
|
|
113
114
|
crosshair/libimpl/fractionlib.py,sha256=qdbiAHHC480YdKq3wYK_piZ3UD7oT64YfuNclypMUfQ,458
|
|
114
115
|
crosshair/libimpl/binascii_ch_test.py,sha256=hFqSfF1Q8jl2LNBIWaQ6vBJIIshPOmSwrR0T1Ko4Leo,1009
|
|
115
116
|
crosshair/libimpl/jsonlib.py,sha256=xFTvqGKzQcCgPme1WIpNMjBPfNHVZBMNuNx0uKMYXj0,28805
|
|
116
117
|
crosshair/libimpl/typeslib_test.py,sha256=qCeUU_c-zmuvfwHEsaYqic9wdGzs9XbDZNr6bF2Xp58,1129
|
|
117
|
-
crosshair/libimpl/builtinslib_test.py,sha256=
|
|
118
|
+
crosshair/libimpl/builtinslib_test.py,sha256=LYjvmVx0ndUK7YNMzNUaH39YesY_yrvIWb5XOwdnkDM,92255
|
|
118
119
|
crosshair/libimpl/zliblib.py,sha256=XymJTKYbplpYJZ-P7GKVSY3V_8HPy5lqRFsCH1zezIk,357
|
|
119
120
|
crosshair/libimpl/decimallib.py,sha256=zBKDrDZcg45oCKUkf6SIDuVpjA1Web7tD1MEQo5cjxI,177348
|
|
120
121
|
crosshair/libimpl/relib_ch_test.py,sha256=zvSBF82mNQR5yEOMwwcaBOh8OpJkQeiVl85pgYVvJRA,5235
|
|
121
|
-
crosshair/libimpl/functoolslib.py,sha256=
|
|
122
|
+
crosshair/libimpl/functoolslib.py,sha256=YD0g9UnC4v_wZXR3ekQa2gLrKJnr6dHdYtT9qIMUIGM,1009
|
|
122
123
|
crosshair/libimpl/collectionslib_ch_test.py,sha256=PYitnmXXEZfm25FzBodEX1hOpwqnDspbqt5aqzeVar0,5855
|
|
123
|
-
crosshair/libimpl/builtinslib_ch_test.py,sha256=
|
|
124
|
+
crosshair/libimpl/builtinslib_ch_test.py,sha256=UasixDc_qZHOEkmMkh_2r9l2NgItQBzwHpvs7dRfgvk,30857
|
|
124
125
|
crosshair/libimpl/randomlib_test.py,sha256=KuEgrih9JvstsFDwrgAuHZrlVjIvaNUxS8ftiGPrwHI,3322
|
|
125
126
|
crosshair/libimpl/weakreflib_test.py,sha256=CdGJhW32qJoxedn8QzPcMcKKmfl9Nv4FPDYebblIKmY,1812
|
|
126
127
|
crosshair/libimpl/mathlib.py,sha256=ci_byDulWf1VOitpD3C-TwToL6CRYKkJUVMxjAYzUH8,4256
|
|
@@ -130,7 +131,7 @@ crosshair/libimpl/timelib_test.py,sha256=Ercmhw1Yc96CYnWhqIW7eu31R95uTGVZcgzxSiZ
|
|
|
130
131
|
crosshair/libimpl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
131
132
|
crosshair/libimpl/importliblib_test.py,sha256=DM8wWvPYbDTsdKVlS-JMrZ2cQpWSy4yXjZGPMQwF7Ss,1020
|
|
132
133
|
crosshair/libimpl/relib_test.py,sha256=3raQ0JoU4vu8_NKfrjk7TkUIqVuuhR8mGCRPJPb0RI0,16085
|
|
133
|
-
crosshair/libimpl/arraylib.py,sha256=
|
|
134
|
+
crosshair/libimpl/arraylib.py,sha256=QL6QH9iHHsmKA2zzW9DKPB6AbaxRiZbD3ikSGQVgqxU,4875
|
|
134
135
|
crosshair/libimpl/urlliblib.py,sha256=EaC-nWdi-IFG3ewZrzgCqbKc9Sf9wlUN0wvGjTU5TOM,614
|
|
135
136
|
crosshair/libimpl/bisectlib_test.py,sha256=ZQtYmBYD0Pb1IiFelsgdvqyeUMKaqaDb1BRb87LTSbI,753
|
|
136
137
|
crosshair/libimpl/itertoolslib.py,sha256=1bwV8voMV2j18KjXYMKkuNSC8p4VE_ZvY-74rAbWjB4,1245
|
|
@@ -142,21 +143,21 @@ crosshair/libimpl/codecslib_test.py,sha256=8K64njhxnTe7qLh-_onARNsm_qSG7BWM5dXgA
|
|
|
142
143
|
crosshair/libimpl/jsonlib_ch_test.py,sha256=lLGnFq6Ti7l6aV_jDz-HEzKaPy5TIj_JA0sSnfI0Psc,1267
|
|
143
144
|
crosshair/libimpl/iolib_test.py,sha256=VJRSQ3nnROfXvtqdy3yLx3eYmIh31qSmeuAiIa7ywKU,667
|
|
144
145
|
crosshair/libimpl/codecslib.py,sha256=lB87T1EYSBh4JXaqzjSpQG9CMfKtgckwA7f6OIR0S-Q,2668
|
|
145
|
-
crosshair/libimpl/datetimelib_ch_test.py,sha256=
|
|
146
|
+
crosshair/libimpl/datetimelib_ch_test.py,sha256=nevP0P8nkJ8DasvoVcD2tHiaZSFz5H8BHozzI-ZElhg,9288
|
|
146
147
|
crosshair/libimpl/itertoolslib_test.py,sha256=MV-zSdfdeQi_UpZJdanKzHm2GRqrC7BMUoCd95ldMPw,1183
|
|
147
148
|
crosshair/libimpl/copylib.py,sha256=icHJWeFK_tsPSdJhvlS5fVcBwlh0uJh0nzXsRJCGtzs,527
|
|
148
149
|
crosshair/libimpl/hashliblib_test.py,sha256=HhPdm5CBTAeqrs41NpCxkexWYWyIf1JiA4cls72WQfM,406
|
|
149
150
|
crosshair/libimpl/binasciilib.py,sha256=9w4C37uxRNOmz9EUuhJduHlMKn0f7baY5fwwdvx1uto,5070
|
|
150
151
|
crosshair/libimpl/typeslib.py,sha256=5qWrHZZN8jQZoHPiQtkaFolR8qTYCQtJw3HRWCrCKQI,468
|
|
151
|
-
crosshair/libimpl/datetimelib.py,sha256=
|
|
152
|
-
crosshair/libimpl/relib.py,sha256=
|
|
152
|
+
crosshair/libimpl/datetimelib.py,sha256=3mdouYmzY5wIbByKcx_ehvzLYasiM4LDEn1-BB9edV0,79146
|
|
153
|
+
crosshair/libimpl/relib.py,sha256=ahS9f1_rhbVKZUhvYmuSTv0_ovmvH5NXShxDJu7aUhE,29272
|
|
153
154
|
crosshair/libimpl/iolib.py,sha256=FbvqTfQRPaML5u0hHnrFZLrk3jYC-x4OO6eJujvFJaY,6983
|
|
154
155
|
crosshair/libimpl/urlliblib_test.py,sha256=UcSmwRdJFkzXvkaV-jmrP6G4zhbu7X2NNjM7ePsYxRs,503
|
|
155
156
|
crosshair/libimpl/heapqlib.py,sha256=TWH55dg-Hi5FRz2oZuXHcBU_xJzHjvhe9YQVvw7ZbfI,1311
|
|
156
|
-
crosshair/libimpl/unicodedatalib_test.py,sha256=
|
|
157
|
+
crosshair/libimpl/unicodedatalib_test.py,sha256=b0CHHHqDj5Ej_UEDnz3aUesILObcfLm00eEXQtfsgfM,1442
|
|
157
158
|
crosshair/libimpl/encodings_ch_test.py,sha256=0qLsioOuFUZkOjP4J9Wct4CGBaBY8BnHx9paZHnIofI,2513
|
|
158
159
|
crosshair/libimpl/hashliblib.py,sha256=Ki_cw28OnhZExgKbSoh5GaDbBfNRIOqH7O2aYQJGS3M,1234
|
|
159
|
-
crosshair/libimpl/functoolslib_test.py,sha256=
|
|
160
|
+
crosshair/libimpl/functoolslib_test.py,sha256=eaT_JWu-C3j8l9ekwDXd2dhPJvuB577T9DuXRohL0fc,1604
|
|
160
161
|
crosshair/libimpl/iolib_ch_test.py,sha256=yibR3CbYjd9Sf2UaAIQaWO8QXbsZgyDc9w10VEtQN-A,3623
|
|
161
162
|
crosshair/libimpl/weakreflib.py,sha256=By2JxeBHJCQP_Na5MBhE9YCc0O5NoKefKASoRBUNcW0,230
|
|
162
163
|
crosshair/libimpl/decimallib_test.py,sha256=393MkVB9-LPcA7JJK6wGAbDyd-YejkjwrXRaEDaVhjM,2238
|
|
@@ -166,10 +167,10 @@ crosshair/libimpl/encodings/utf_8.py,sha256=BygLLIeI3_F2MpFVgaty8ebiuxp0YWz7IzXe
|
|
|
166
167
|
crosshair/libimpl/encodings/ascii.py,sha256=Cz1xraTkXdQ5aBKDkorX4rAvrmf877_EqzC9hOmbItw,1416
|
|
167
168
|
crosshair/libimpl/encodings/__init__.py,sha256=5LTEj1M-S00eZ4rfQWczAixg57vyh_9vZ5m5EKB5Ksc,680
|
|
168
169
|
crosshair/libimpl/encodings/latin_1.py,sha256=ftUsPjUb9L7UKXKi9P7OAqOl9FkNP98M9jMAvseXBCQ,1242
|
|
169
|
-
crosshair/libimpl/encodings/_encutil.py,sha256=
|
|
170
|
-
crosshair_tool-0.0.
|
|
171
|
-
crosshair_tool-0.0.
|
|
172
|
-
crosshair_tool-0.0.
|
|
173
|
-
crosshair_tool-0.0.
|
|
174
|
-
crosshair_tool-0.0.
|
|
175
|
-
crosshair_tool-0.0.
|
|
170
|
+
crosshair/libimpl/encodings/_encutil.py,sha256=R0tLdyc83fN6C8c_tl5vetDCpayxeYaAT7UWwPQzX10,6982
|
|
171
|
+
crosshair_tool-0.0.97.dist-info/RECORD,,
|
|
172
|
+
crosshair_tool-0.0.97.dist-info/WHEEL,sha256=sunMa2yiYbrNLGeMVDqEA0ayyJbHlex7SCn1TZrEq60,136
|
|
173
|
+
crosshair_tool-0.0.97.dist-info/entry_points.txt,sha256=u5FIPVn1jqn4Kzg5K_iNnbP6L4hQw5FWjQ0UMezG2VE,96
|
|
174
|
+
crosshair_tool-0.0.97.dist-info/top_level.txt,sha256=2jLWtM-BWg_ZYNbNfrcds0HFZD62a6J7ZIbcgcQrRk4,29
|
|
175
|
+
crosshair_tool-0.0.97.dist-info/METADATA,sha256=5ADW4j5TNenYaOjXs10_7udeVLv9eUlaIq9ZztZMXC8,6727
|
|
176
|
+
crosshair_tool-0.0.97.dist-info/licenses/LICENSE,sha256=NVyMvNqn1pH6RSHs6RWRcJyJvORnpgGFBlF73buqYJ0,4459
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|