#
tokens: 49944/50000 39/1144 files (page 3/103)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 3 of 103. Use http://codebase.md/cyfrin/aderyn?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .cargo
│   └── config.toml
├── .git-blame-ignore-revs
├── .gitattributes
├── .github
│   ├── images
│   │   ├── aderyn_logo.png
│   │   ├── poweredbycyfrinblack.png
│   │   └── poweredbycyfrinblue.png
│   ├── ISSUE_TEMPLATE
│   │   ├── bug_report.md
│   │   ├── false_positive_issue.md
│   │   └── feature_request.md
│   └── workflows
│       ├── cargo.yml
│       ├── dependencies.yml
│       ├── release.yml
│       ├── reports.yml
│       └── toml.yml
├── .gitignore
├── .gitmodules
├── .vscode
│   └── settings.json
├── aderyn
│   ├── Cargo.toml
│   ├── oranda.json
│   ├── README.md
│   ├── src
│   │   ├── birdsong.rs
│   │   ├── completions.rs
│   │   ├── lib.rs
│   │   ├── lsp.rs
│   │   ├── main.rs
│   │   ├── mcp.rs
│   │   └── panic.rs
│   └── templates
│       └── aderyn.toml
├── aderyn_core
│   ├── .gitignore
│   ├── Cargo.toml
│   ├── README.md
│   ├── src
│   │   ├── ast
│   │   │   ├── ast_nodes.rs
│   │   │   ├── ast_visitor.rs
│   │   │   ├── impls
│   │   │   │   ├── ctx
│   │   │   │   │   ├── getters.rs
│   │   │   │   │   ├── utils.rs
│   │   │   │   │   └── workspace.rs
│   │   │   │   ├── ctx.rs
│   │   │   │   ├── disp
│   │   │   │   │   ├── blocks.rs
│   │   │   │   │   ├── contracts.rs
│   │   │   │   │   ├── enumerations.rs
│   │   │   │   │   ├── errors.rs
│   │   │   │   │   ├── events.rs
│   │   │   │   │   ├── expressions.rs
│   │   │   │   │   ├── functions.rs
│   │   │   │   │   ├── identifiers.rs
│   │   │   │   │   ├── literals.rs
│   │   │   │   │   ├── modifiers.rs
│   │   │   │   │   ├── statements.rs
│   │   │   │   │   ├── structures.rs
│   │   │   │   │   ├── types.rs
│   │   │   │   │   ├── user_defined_value_types.rs
│   │   │   │   │   ├── using_for_directives.rs
│   │   │   │   │   └── variables.rs
│   │   │   │   ├── disp.rs
│   │   │   │   ├── node
│   │   │   │   │   ├── blocks.rs
│   │   │   │   │   ├── contracts.rs
│   │   │   │   │   ├── documentation.rs
│   │   │   │   │   ├── enumerations.rs
│   │   │   │   │   ├── errors.rs
│   │   │   │   │   ├── events.rs
│   │   │   │   │   ├── expressions.rs
│   │   │   │   │   ├── functions.rs
│   │   │   │   │   ├── identifiers.rs
│   │   │   │   │   ├── import_directives.rs
│   │   │   │   │   ├── literals.rs
│   │   │   │   │   ├── modifiers.rs
│   │   │   │   │   ├── pragma_directives.rs
│   │   │   │   │   ├── source_units.rs
│   │   │   │   │   ├── statements.rs
│   │   │   │   │   ├── structures.rs
│   │   │   │   │   ├── types.rs
│   │   │   │   │   ├── user_defined_value_types.rs
│   │   │   │   │   ├── using_for_directives.rs
│   │   │   │   │   └── variables.rs
│   │   │   │   ├── node.rs
│   │   │   │   ├── own
│   │   │   │   │   ├── hashing.rs
│   │   │   │   │   ├── node_id.rs
│   │   │   │   │   ├── source_units.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   └── own.rs
│   │   │   ├── impls.rs
│   │   │   ├── macros.rs
│   │   │   ├── magic.rs
│   │   │   ├── node_type.rs
│   │   │   ├── workspace_visitor.rs
│   │   │   └── yul.rs
│   │   ├── ast.rs
│   │   ├── audit
│   │   │   ├── attack_surface.rs
│   │   │   ├── auditor.rs
│   │   │   ├── entrypoint.rs
│   │   │   └── public_functions_no_sender.rs
│   │   ├── audit.rs
│   │   ├── context
│   │   │   ├── browser
│   │   │   │   ├── ancestral_line.rs
│   │   │   │   ├── closest_ancestor.rs
│   │   │   │   ├── external_calls.rs
│   │   │   │   ├── extractor.rs
│   │   │   │   ├── immediate_children.rs
│   │   │   │   ├── location.rs
│   │   │   │   ├── parent.rs
│   │   │   │   ├── peek_over.rs
│   │   │   │   ├── peek_under.rs
│   │   │   │   ├── peek.rs
│   │   │   │   ├── siblings.rs
│   │   │   │   ├── sort_nodes.rs
│   │   │   │   └── storage_vars.rs
│   │   │   ├── browser.rs
│   │   │   ├── flow
│   │   │   │   ├── display.rs
│   │   │   │   ├── error.rs
│   │   │   │   ├── kind.rs
│   │   │   │   ├── primitives.rs
│   │   │   │   ├── reducibles.rs
│   │   │   │   ├── tests.rs
│   │   │   │   ├── utils.rs
│   │   │   │   ├── visualizer.rs
│   │   │   │   └── voids.rs
│   │   │   ├── flow.rs
│   │   │   ├── graph
│   │   │   │   ├── callgraph
│   │   │   │   │   ├── legacy.rs
│   │   │   │   │   ├── new.rs
│   │   │   │   │   ├── tests.rs
│   │   │   │   │   ├── utils.rs
│   │   │   │   │   └── visit.rs
│   │   │   │   ├── callgraph.rs
│   │   │   │   ├── preprocess
│   │   │   │   │   ├── legacy.rs
│   │   │   │   │   └── new.rs
│   │   │   │   ├── preprocess.rs
│   │   │   │   ├── traits.rs
│   │   │   │   └── utils.rs
│   │   │   ├── graph.rs
│   │   │   ├── mcp
│   │   │   │   ├── callgraph
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   ├── callgraph.rs
│   │   │   │   ├── contract_surface
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── util.rs
│   │   │   │   ├── contract_surface.rs
│   │   │   │   ├── list_contracts
│   │   │   │   │   ├── render.rs
│   │   │   │   │   └── tool.rs
│   │   │   │   ├── list_contracts.rs
│   │   │   │   ├── macros.rs
│   │   │   │   ├── node_finder
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   ├── node_finder.rs
│   │   │   │   ├── node_summarizer
│   │   │   │   │   ├── render.rs
│   │   │   │   │   ├── tool.rs
│   │   │   │   │   └── utils.rs
│   │   │   │   ├── node_summarizer.rs
│   │   │   │   ├── project_overview
│   │   │   │   │   ├── render.rs
│   │   │   │   │   └── tool.rs
│   │   │   │   ├── project_overview.rs
│   │   │   │   ├── tool_guide
│   │   │   │   │   └── tool.rs
│   │   │   │   └── tool_guide.rs
│   │   │   ├── mcp.rs
│   │   │   ├── router
│   │   │   │   ├── external_calls.rs
│   │   │   │   ├── internal_calls.rs
│   │   │   │   ├── modifier_calls.rs
│   │   │   │   └── tests.rs
│   │   │   ├── router.rs
│   │   │   └── workspace.rs
│   │   ├── context.rs
│   │   ├── detect
│   │   │   ├── detector.rs
│   │   │   ├── entrypoint.rs
│   │   │   ├── helpers.rs
│   │   │   ├── high
│   │   │   │   ├── _template.rs
│   │   │   │   ├── abi_encode_packed_hash_collision.rs
│   │   │   │   ├── arbitrary_transfer_from.rs
│   │   │   │   ├── const_func_changes_state.rs
│   │   │   │   ├── contract_locks_ether.rs
│   │   │   │   ├── dangerous_unary_operator.rs
│   │   │   │   ├── delegate_call_unchecked_address.rs
│   │   │   │   ├── delete_nested_mapping.rs
│   │   │   │   ├── dynamic_array_length_assignment.rs
│   │   │   │   ├── enumerable_loop_removal.rs
│   │   │   │   ├── eth_send_unchecked_address.rs
│   │   │   │   ├── experimental_encoder.rs
│   │   │   │   ├── function_selector_collision.rs
│   │   │   │   ├── incorrect_caret_operator.rs
│   │   │   │   ├── incorrect_erc20_interface.rs
│   │   │   │   ├── incorrect_erc721_interface.rs
│   │   │   │   ├── incorrect_shift_order.rs
│   │   │   │   ├── misused_boolean.rs
│   │   │   │   ├── msg_value_in_loops.rs
│   │   │   │   ├── multiple_constructors.rs
│   │   │   │   ├── nested_struct_in_mapping.rs
│   │   │   │   ├── out_of_order_retryable.rs
│   │   │   │   ├── pre_declared_variable_usage.rs
│   │   │   │   ├── reentrancy_state_change.rs
│   │   │   │   ├── reused_contract_name.rs
│   │   │   │   ├── rtlo.rs
│   │   │   │   ├── selfdestruct.rs
│   │   │   │   ├── signed_integer_storage_array.rs
│   │   │   │   ├── state_variable_shadowing.rs
│   │   │   │   ├── storage_array_memory_edit.rs
│   │   │   │   ├── strict_equality_contract_balance.rs
│   │   │   │   ├── tautological_compare.rs
│   │   │   │   ├── tautology_or_contradiction.rs
│   │   │   │   ├── tx_origin_used_for_auth.rs
│   │   │   │   ├── unchecked_low_level_call.rs
│   │   │   │   ├── unchecked_send.rs
│   │   │   │   ├── unprotected_initializer.rs
│   │   │   │   ├── unsafe_casting.rs
│   │   │   │   ├── weak_randomness.rs
│   │   │   │   └── yul_return.rs
│   │   │   ├── high.rs
│   │   │   ├── low
│   │   │   │   ├── _template.rs
│   │   │   │   ├── assert_state_change.rs
│   │   │   │   ├── block_timestamp_deadline.rs
│   │   │   │   ├── boolean_equality.rs
│   │   │   │   ├── builtin_symbol_shadowing.rs
│   │   │   │   ├── centralization_risk.rs
│   │   │   │   ├── constant_function_contains_assembly.rs
│   │   │   │   ├── costly_loop.rs
│   │   │   │   ├── dead_code.rs
│   │   │   │   ├── delegatecall_in_loop.rs
│   │   │   │   ├── deprecated_oz_function.rs
│   │   │   │   ├── division_before_multiplication.rs
│   │   │   │   ├── ecrecover.rs
│   │   │   │   ├── empty_block.rs
│   │   │   │   ├── empty_require_revert.rs
│   │   │   │   ├── function_initializing_state.rs
│   │   │   │   ├── function_pointer_in_constructor.rs
│   │   │   │   ├── inconsistent_type_names.rs
│   │   │   │   ├── incorrect_modifier.rs
│   │   │   │   ├── internal_function_used_once.rs
│   │   │   │   ├── large_numeric_literal.rs
│   │   │   │   ├── literal_instead_of_constant.rs
│   │   │   │   ├── local_variable_shadowing.rs
│   │   │   │   ├── missing_inheritance.rs
│   │   │   │   ├── modifier_used_only_once.rs
│   │   │   │   ├── multiple_placeholders.rs
│   │   │   │   ├── non_reentrant_not_first.rs
│   │   │   │   ├── push_0_opcode.rs
│   │   │   │   ├── redundant_statement.rs
│   │   │   │   ├── require_revert_in_loop.rs
│   │   │   │   ├── return_bomb.rs
│   │   │   │   ├── solmate_safe_transfer_lib.rs
│   │   │   │   ├── state_change_without_event.rs
│   │   │   │   ├── state_no_address_check.rs
│   │   │   │   ├── state_variable_could_be_constant.rs
│   │   │   │   ├── state_variable_could_be_immutable.rs
│   │   │   │   ├── state_variable_init_order.rs
│   │   │   │   ├── state_variable_read_external.rs
│   │   │   │   ├── storage_array_length_not_cached.rs
│   │   │   │   ├── todo.rs
│   │   │   │   ├── unchecked_return.rs
│   │   │   │   ├── uninitialized_local_variable.rs
│   │   │   │   ├── unsafe_erc20_operation.rs
│   │   │   │   ├── unsafe_oz_erc721_mint.rs
│   │   │   │   ├── unspecific_solidity_pragma.rs
│   │   │   │   ├── unused_error.rs
│   │   │   │   ├── unused_import.rs
│   │   │   │   ├── unused_public_function.rs
│   │   │   │   ├── unused_state_variable.rs
│   │   │   │   └── void_constructor.rs
│   │   │   ├── low.rs
│   │   │   └── test_utils.rs
│   │   ├── detect.rs
│   │   ├── lib.rs
│   │   ├── stats
│   │   │   ├── cloc.rs
│   │   │   ├── dbg_tips.txt
│   │   │   ├── ignore.rs
│   │   │   ├── token.rs
│   │   │   └── util.rs
│   │   ├── stats.rs
│   │   ├── test_utils
│   │   │   └── load_source_unit.rs
│   │   └── test_utils.rs
│   ├── templates
│   │   └── mcp-tool-response
│   │       ├── callgraph.md
│   │       ├── contract_surface.md
│   │       ├── list_contracts.md
│   │       ├── node_finder_get_all.md
│   │       ├── node_finder_grep.md
│   │       ├── node_finder_search.md
│   │       ├── node_summarizer.md
│   │       ├── project_overview.md
│   │       └── tool_guide.md
│   └── tests
│       ├── common
│       │   ├── ancestral_line.rs
│       │   ├── closest_ancestor.rs
│       │   ├── immediate_children.rs
│       │   ├── immediate_parent.rs
│       │   ├── mod.rs
│       │   ├── new_ast_nodes.rs
│       │   ├── peek_over.rs
│       │   └── sibling.rs
│       └── traversal.rs
├── aderyn_driver
│   ├── .gitignore
│   ├── benches
│   │   └── detectors.rs
│   ├── Cargo.toml
│   ├── README.md
│   ├── src
│   │   ├── compile.rs
│   │   ├── config.rs
│   │   ├── display.rs
│   │   ├── driver.rs
│   │   ├── interface
│   │   │   ├── json.rs
│   │   │   ├── lsp.rs
│   │   │   ├── markdown.rs
│   │   │   ├── mod.rs
│   │   │   ├── sarif.rs
│   │   │   ├── tables.rs
│   │   │   └── util.rs
│   │   ├── lib.rs
│   │   ├── mcp.rs
│   │   ├── process.rs
│   │   └── runner.rs
│   └── tests
│       └── astgen.rs
├── bacon.toml
├── benchmarks
│   ├── aderyn
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── iteration_times.svg
│   │       │   └── pdf.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── iteration_times_small.svg
│   │       ├── iteration_times.svg
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── relative_iteration_times_small.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── SD.svg
│   │       └── typical.svg
│   ├── arbitrary-transfer-from
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── avoid-abi-encode-packed
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── block-timestamp-deadline
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── centralization-risk
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── constants-instead-of-literals
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── delegate-call-in-loop
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── deprecated-oz-functions
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── ecrecover
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── empty-block
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── hello_world
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── inconsistent-type-names
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── large-numeric-literal
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── non-reentrant-before-others
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── push-zero-opcode
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── report
│   │   └── index.html
│   ├── require-with-string
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── solmate-safe-transfer-lib
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unindexed-events
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unprotected-initializer
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unsafe-erc20-functions
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unsafe-oz-erc721-mint
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── unspecific-solidity-pragma
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── useless-internal-function
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── useless-modifier
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   ├── useless-public-function
│   │   ├── base
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   ├── change
│   │   │   └── estimates.json
│   │   ├── new
│   │   │   ├── benchmark.json
│   │   │   ├── estimates.json
│   │   │   ├── sample.json
│   │   │   └── tukey.json
│   │   └── report
│   │       ├── both
│   │       │   ├── pdf.svg
│   │       │   └── regression.svg
│   │       ├── change
│   │       │   ├── mean.svg
│   │       │   ├── median.svg
│   │       │   └── t-test.svg
│   │       ├── index.html
│   │       ├── MAD.svg
│   │       ├── mean.svg
│   │       ├── median.svg
│   │       ├── pdf_small.svg
│   │       ├── pdf.svg
│   │       ├── regression_small.svg
│   │       ├── regression.svg
│   │       ├── relative_pdf_small.svg
│   │       ├── relative_regression_small.svg
│   │       ├── SD.svg
│   │       ├── slope.svg
│   │       └── typical.svg
│   └── zero-address-check
│       ├── base
│       │   ├── benchmark.json
│       │   ├── estimates.json
│       │   ├── sample.json
│       │   └── tukey.json
│       ├── change
│       │   └── estimates.json
│       ├── new
│       │   ├── benchmark.json
│       │   ├── estimates.json
│       │   ├── sample.json
│       │   └── tukey.json
│       └── report
│           ├── both
│           │   ├── pdf.svg
│           │   └── regression.svg
│           ├── change
│           │   ├── mean.svg
│           │   ├── median.svg
│           │   └── t-test.svg
│           ├── index.html
│           ├── MAD.svg
│           ├── mean.svg
│           ├── median.svg
│           ├── pdf_small.svg
│           ├── pdf.svg
│           ├── regression_small.svg
│           ├── regression.svg
│           ├── relative_pdf_small.svg
│           ├── relative_regression_small.svg
│           ├── SD.svg
│           ├── slope.svg
│           └── typical.svg
├── Cargo.lock
├── Cargo.toml
├── cli
│   ├── benchmarks.sh
│   └── reportgen.sh
├── CODEOWNERS
├── CONTRIBUTING.md
├── cyfrinup
│   ├── dynamic_script
│   └── why.md
├── deny.toml
├── dist-workspace.toml
├── funding.json
├── LICENSE
├── Makefile
├── package-lock.json
├── package.json
├── README.md
├── RELEASE_CHECKLIST.md
├── reports
│   ├── adhoc-sol-files-highs-only-report.json
│   ├── adhoc-sol-files-report.md
│   ├── ccip-functions-report.md
│   ├── detector-exclude-report.md
│   ├── detector-include-report.md
│   ├── empty_report.md
│   ├── hardhat-playground-report.md
│   ├── nft-report-icm.md
│   ├── nft-report.md
│   ├── prb-math-report.md
│   ├── report.json
│   ├── report.md
│   ├── report.sarif
│   ├── sablier-aderyn-toml-nested-root.md
│   ├── templegold-report.md
│   ├── uniswap_profile.md
│   └── via-ir-enabled-report.md
├── rust-toolchain.toml
├── rustfmt.toml
├── tests
│   ├── adhoc-sol-files
│   │   ├── aderyn.toml
│   │   ├── Counter.sol
│   │   ├── DemoASTNodes.sol
│   │   ├── Helper.sol
│   │   ├── InconsistentUints.sol
│   │   ├── inheritance
│   │   │   ├── ExtendedInheritance.sol
│   │   │   ├── IContractInheritance.sol
│   │   │   └── InheritanceBase.sol
│   │   ├── InternalFunctions.sol
│   │   ├── lib
│   │   │   └── ThisShouldBeExcluded.sol
│   │   ├── multiple-versions
│   │   │   ├── 0.4
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   ├── 0.5
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   ├── 0.6
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   ├── 0.7
│   │   │   │   ├── A.sol
│   │   │   │   └── B.sol
│   │   │   └── 0.8
│   │   │       ├── A.sol
│   │   │       └── B.sol
│   │   ├── OnceModifierExample.sol
│   │   └── StateVariables.sol
│   ├── ast
│   │   ├── abstract_contract.json
│   │   ├── address_payable.json
│   │   ├── array_type_name.json
│   │   ├── ast-erc4626.json
│   │   ├── base_constructor_call.json
│   │   ├── bit_not.json
│   │   ├── call.json
│   │   ├── constructor.json
│   │   ├── contract_dep_order.json
│   │   ├── do_while.json
│   │   ├── documentation_1.json
│   │   ├── documentation_2.json
│   │   ├── documentation_3.json
│   │   ├── documentation_local_variable.json
│   │   ├── documentation_on_statements.json
│   │   ├── documentation_triple.json
│   │   ├── empty_block.json
│   │   ├── enum_value_declaration.json
│   │   ├── enum_value.json
│   │   ├── event_definition.json
│   │   ├── experimental_encoder_pragma.json
│   │   ├── fallback_and_reveice_ether.json
│   │   ├── fallback_payable.json
│   │   ├── fallback.json
│   │   ├── function_type.json
│   │   ├── function.json
│   │   ├── global_enum.json
│   │   ├── global_struct.json
│   │   ├── inheritance_specifier.json
│   │   ├── leave.json
│   │   ├── license.json
│   │   ├── long_type_name_binary_operation.json
│   │   ├── long_type_name_identifier.json
│   │   ├── loop.json
│   │   ├── mappings.json
│   │   ├── modifier_definition.json
│   │   ├── modifier_invocation.json
│   │   ├── mutability.json
│   │   ├── nested_functions.json
│   │   ├── non_utf8.json
│   │   ├── override.json
│   │   ├── placeholder_statement.json
│   │   ├── receive_ether.json
│   │   ├── short_type_name_ref.json
│   │   ├── short_type_name.json
│   │   ├── slot_offset.json
│   │   ├── smoke.json
│   │   ├── source_location.json
│   │   ├── string.json
│   │   ├── stringlit.json
│   │   ├── switch_default.json
│   │   ├── switch.json
│   │   ├── try_catch.json
│   │   ├── two_base_functions.json
│   │   ├── unicode.json
│   │   ├── used_errors.json
│   │   ├── userDefinedValueType.json
│   │   ├── using_for_directive.json
│   │   ├── var_access.json
│   │   └── yul_hex_literal.json
│   ├── contract-playground
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── dot
│   │   │   └── .gitkeep
│   │   ├── foundry.toml
│   │   ├── README.md
│   │   ├── script
│   │   │   └── Counter.s.sol
│   │   ├── src
│   │   │   ├── AbstractContract.sol
│   │   │   ├── AderynIgnoreCustomDetectors.sol
│   │   │   ├── AdminContract.sol
│   │   │   ├── ArbitraryTransferFrom.sol
│   │   │   ├── AssemblyExample.sol
│   │   │   ├── AssertStateChange.sol
│   │   │   ├── auditor_mode
│   │   │   │   ├── ExternalCalls.sol
│   │   │   │   └── PublicFunctionsWithoutSenderCheck.sol
│   │   │   ├── BooleanEquality.sol
│   │   │   ├── BuiltinSymbolShadow.sol
│   │   │   ├── CacheArrayLength.sol
│   │   │   ├── CallGraphTests.sol
│   │   │   ├── Casting.sol
│   │   │   ├── cloc
│   │   │   │   ├── AnotherHeavilyCommentedContract.sol
│   │   │   │   ├── EmptyContractFile.sol
│   │   │   │   └── HeavilyCommentedContract.sol
│   │   │   ├── CompilerBugStorageSignedIntegerArray.sol
│   │   │   ├── ConstantFuncsAssembly.sol
│   │   │   ├── ConstantsLiterals.sol
│   │   │   ├── ConstFuncChangeState.sol
│   │   │   ├── ContractLocksEther.sol
│   │   │   ├── ContractWithTodo.sol
│   │   │   ├── control_flow
│   │   │   │   └── SimpleProgram.sol
│   │   │   ├── CostlyOperationsInsideLoops.sol
│   │   │   ├── Counter.sol
│   │   │   ├── CrazyPragma.sol
│   │   │   ├── DangerousStrictEquality1.sol
│   │   │   ├── DangerousStrictEquality2.sol
│   │   │   ├── DangerousUnaryOperator.sol
│   │   │   ├── DeadCode.sol
│   │   │   ├── DelegateCallWithoutAddressCheck.sol
│   │   │   ├── DeletionNestedMappingStructureContract.sol
│   │   │   ├── DeprecatedOZFunctions.sol
│   │   │   ├── DivisionBeforeMultiplication.sol
│   │   │   ├── DynamicArrayLengthAssignment.sol
│   │   │   ├── EmitAfterExternalCall.sol
│   │   │   ├── EmptyBlocks.sol
│   │   │   ├── EnumerableSetIteration.sol
│   │   │   ├── eth2
│   │   │   │   └── DepositContract.sol
│   │   │   ├── ExperimentalEncoder.sol
│   │   │   ├── ExternalCalls.sol
│   │   │   ├── FunctionInitializingState.sol
│   │   │   ├── FunctionPointers.sol
│   │   │   ├── FunctionSignatureCollision.sol
│   │   │   ├── HugeConstants.sol
│   │   │   ├── IgnoreEverything.sol
│   │   │   ├── InconsistentUints.sol
│   │   │   ├── IncorrectCaretOperator.sol
│   │   │   ├── IncorrectERC20.sol
│   │   │   ├── IncorrectERC721.sol
│   │   │   ├── IncorrectModifier.sol
│   │   │   ├── IncorrectShift.sol
│   │   │   ├── inheritance
│   │   │   │   ├── ExtendedInheritance.sol
│   │   │   │   ├── IContractInheritance.sol
│   │   │   │   └── InheritanceBase.sol
│   │   │   ├── InternalFunctions.sol
│   │   │   ├── KeccakContract.sol
│   │   │   ├── LocalVariableShadow.sol
│   │   │   ├── MissingInheritance.sol
│   │   │   ├── MisusedBoolean.sol
│   │   │   ├── MsgValueInLoop.sol
│   │   │   ├── MultipleConstructorSchemes.sol
│   │   │   ├── MultiplePlaceholders.sol
│   │   │   ├── nested
│   │   │   │   ├── 1
│   │   │   │   │   └── Nested.sol
│   │   │   │   └── 2
│   │   │   │       └── Nested.sol
│   │   │   ├── nested_mappings
│   │   │   │   ├── LaterVersion.sol
│   │   │   │   └── NestedMappings.sol
│   │   │   ├── OnceModifierExample.sol
│   │   │   ├── OnlyLibrary.sol
│   │   │   ├── OutOfOrderRetryable.sol
│   │   │   ├── parent_chain
│   │   │   │   └── ParentChainContract.sol
│   │   │   ├── PragmaRange.sol
│   │   │   ├── PreDeclaredVarUsage.sol
│   │   │   ├── PublicFunction.sol
│   │   │   ├── PublicVariableReadInExternalContext.sol
│   │   │   ├── RedundantStatements.sol
│   │   │   ├── ReturnBomb.sol
│   │   │   ├── reused_contract_name
│   │   │   │   ├── ContractA.sol
│   │   │   │   └── ContractB.sol
│   │   │   ├── RevertsAndRequriesInLoops.sol
│   │   │   ├── router
│   │   │   │   ├── ExternalCalls.sol
│   │   │   │   ├── FallbackAndReceiveOverrides.sol
│   │   │   │   ├── InternalCalls.sol
│   │   │   │   ├── ModifierCalls.sol
│   │   │   │   └── VarOverridesFunction.sol
│   │   │   ├── RTLO.sol
│   │   │   ├── SendEtherNoChecks.sol
│   │   │   ├── SendEtherNoChecksLibImport.sol
│   │   │   ├── StateChangeAfterExternalCall.sol
│   │   │   ├── StateShadowing.sol
│   │   │   ├── StateVariableCouldBeDeclaredConstant.sol
│   │   │   ├── StateVariableCouldBeDeclaredImmutable.sol
│   │   │   ├── StateVariables.sol
│   │   │   ├── StateVariablesChangesWithoutEvents.sol
│   │   │   ├── StateVariablesManipulation.sol
│   │   │   ├── StorageConditionals.sol
│   │   │   ├── StorageParameters.sol
│   │   │   ├── T11sTranferer.sol
│   │   │   ├── TautologicalCompare.sol
│   │   │   ├── TautologyOrContradiction.sol
│   │   │   ├── TestERC20.sol
│   │   │   ├── TransientKeyword.sol
│   │   │   ├── Trump.sol
│   │   │   ├── TxOriginUsedForAuth.sol
│   │   │   ├── U2.sol
│   │   │   ├── U3.sol
│   │   │   ├── U4.sol
│   │   │   ├── U5.sol
│   │   │   ├── UncheckedCalls.sol
│   │   │   ├── UncheckedReturn.sol
│   │   │   ├── UncheckedSend.sol
│   │   │   ├── UninitializedLocalVariables.sol
│   │   │   ├── UninitializedStateVariable.sol
│   │   │   ├── uniswap
│   │   │   │   ├── UniswapV2Swapper.sol
│   │   │   │   └── UniswapV3Swapper.sol
│   │   │   ├── UnprotectedInitialize.sol
│   │   │   ├── UnsafeERC721Mint.sol
│   │   │   ├── UnusedError.sol
│   │   │   ├── UnusedImport.sol
│   │   │   ├── UnusedStateVariables.sol
│   │   │   ├── UsingSelfdestruct.sol
│   │   │   ├── VoidConstructor.sol
│   │   │   ├── WeakRandomness.sol
│   │   │   ├── WrongOrderOfLayout.sol
│   │   │   ├── YulReturn.sol
│   │   │   └── ZeroAddressCheck.sol
│   │   └── test
│   │       └── Counter.t.sol
│   ├── detector-exclude
│   │   ├── aderyn.toml
│   │   └── InconsistentUints.sol
│   ├── detector-include
│   │   ├── aderyn.toml
│   │   └── InconsistentUints.sol
│   ├── foundry-nft-f23
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── foundry.lock
│   │   ├── foundry.toml
│   │   ├── README.md
│   │   ├── remappings.txt
│   │   └── src
│   │       ├── BasicNft.sol
│   │       ├── F1.sol
│   │       ├── F2.sol
│   │       ├── Initializer.sol
│   │       └── inner-core-modules
│   │           └── ICM.sol
│   ├── foundry-nft-f23-icm
│   │   ├── .github
│   │   │   └── workflows
│   │   │       └── test.yml
│   │   ├── .gitignore
│   │   ├── aderyn.toml
│   │   ├── foundry.toml
│   │   ├── README.md
│   │   ├── remappings.txt
│   │   └── src
│   │       ├── BasicNft.sol
│   │       ├── F1.sol
│   │       ├── F2.sol
│   │       ├── Initializer.sol
│   │       └── inner-core-modules
│   │           └── ICM.sol
│   ├── hardhat-js-playground
│   │   ├── .gitignore
│   │   ├── artifacts
│   │   │   ├── build-info
│   │   │   │   └── cee6fe9a9a2f03f7ff10a27ab2746af6.json
│   │   │   └── contracts
│   │   │       ├── Counter.sol
│   │   │       │   ├── Counter.dbg.json
│   │   │       │   └── Counter.json
│   │   │       ├── ExtendedInheritance.sol
│   │   │       │   ├── ExtendedInheritance.dbg.json
│   │   │       │   └── ExtendedInheritance.json
│   │   │       ├── IContractInheritance.sol
│   │   │       │   ├── IContractInheritance.dbg.json
│   │   │       │   └── IContractInheritance.json
│   │   │       ├── InheritanceBase.sol
│   │   │       │   ├── InheritanceBase.dbg.json
│   │   │       │   └── InheritanceBase.json
│   │   │       ├── KeccakContract.sol
│   │   │       │   ├── KeccakContract.dbg.json
│   │   │       │   └── KeccakContract.json
│   │   │       ├── Lock.sol
│   │   │       │   ├── Lock.dbg.json
│   │   │       │   └── Lock.json
│   │   │       └── StateVariables.sol
│   │   │           ├── StateVariables.dbg.json
│   │   │           └── StateVariables.json
│   │   ├── contracts
│   │   │   ├── Counter.sol
│   │   │   ├── ExtendedInheritance.sol
│   │   │   ├── IContractInheritance.sol
│   │   │   ├── InheritanceBase.sol
│   │   │   ├── KeccakContract.sol
│   │   │   ├── Lock.sol
│   │   │   └── StateVariables.sol
│   │   ├── hardhat.config.js
│   │   ├── package.json
│   │   ├── README.md
│   │   ├── scripts
│   │   │   └── deploy.js
│   │   ├── test
│   │   │   └── Lock.js
│   │   └── yarn.lock
│   ├── no-sol-files
│   │   ├── extra
│   │   │   └── HelloAgain.md
│   │   ├── Hello.txt
│   │   └── Hello.yul
│   ├── toml
│   │   ├── nested_project1
│   │   │   ├── aderyn.toml
│   │   │   ├── folder1
│   │   │   │   └── hardhat.config.ts
│   │   │   ├── folder2
│   │   │   │   └── hardhat.config.ts
│   │   │   └── folder3
│   │   │       └── file.txt
│   │   └── nested_project2
│   │       ├── aderyn.toml
│   │       ├── folder1
│   │       │   └── foundry.toml
│   │       └── folder2
│   │           └── file1.txt
│   └── via-ir-enabled
│       ├── .gitignore
│       ├── foundry.toml
│       └── src
│           └── SemanticOrdering.sol
├── tools
│   └── xtask
│       ├── Cargo.toml
│       └── src
│           ├── blesspr.rs
│           ├── cut_release.rs
│           ├── flags.rs
│           ├── main.rs
│           ├── reportgen.rs
│           └── tomlgen.rs
└── typos.toml
```

# Files

--------------------------------------------------------------------------------
/aderyn_core/tests/common/peek_over.rs:
--------------------------------------------------------------------------------

```rust
 1 | use std::{collections::BTreeMap, error::Error};
 2 | 
 3 | use aderyn_core::{
 4 |     ast::NodeID,
 5 |     capture,
 6 |     context::{browser::PeekOver, workspace::WorkspaceContext},
 7 |     detect::detector::{IssueDetector, IssueDetectorNamePool, IssueSeverity},
 8 | };
 9 | use eyre::Result;
10 | 
11 | #[derive(Default)]
12 | pub struct PeekOverDemonstrator {
13 |     // Keys are: [0] source file name, [1] line number, [2] character location of node.
14 |     // Do not add items manually, use `capture!` to add nodes to this BTreeMap.
15 |     found_instances: BTreeMap<(String, usize, String), NodeID>,
16 | }
17 | 
18 | impl IssueDetector for PeekOverDemonstrator {
19 |     fn detect(&mut self, context: &WorkspaceContext) -> Result<bool, Box<dyn Error>> {
20 |         for event in context.event_definitions() {
21 |             if let Some(text) = event.peek_over(context)
22 |                 && (text.contains("// SAME CONDITIONALS")
23 |                     || text.contains("// DIFFERENT CONDITIONALS"))
24 |             {
25 |                 capture!(self, context, event);
26 |             }
27 |         }
28 | 
29 |         Ok(!self.found_instances.is_empty())
30 |     }
31 | 
32 |     fn severity(&self) -> IssueSeverity {
33 |         IssueSeverity::High
34 |     }
35 | 
36 |     fn title(&self) -> String {
37 |         String::from("Peek Over Demonstration")
38 |     }
39 | 
40 |     fn description(&self) -> String {
41 |         String::from("Peek Over Demonstration")
42 |     }
43 | 
44 |     fn instances(&self) -> BTreeMap<(String, usize, String), NodeID> {
45 |         self.found_instances.clone()
46 |     }
47 | 
48 |     fn name(&self) -> String {
49 |         format!("{}", IssueDetectorNamePool::CentralizationRisk)
50 |     }
51 | }
52 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/ast/impls/ctx/workspace.rs:
--------------------------------------------------------------------------------

```rust
 1 | use rayon::iter::{IntoParallelIterator, ParallelBridge};
 2 | 
 3 | use crate::{
 4 |     ast::{ContractDefinition, FunctionDefinition},
 5 |     context::{
 6 |         graph::{CallGraphConsumer, CallGraphDirection},
 7 |         workspace::WorkspaceContext,
 8 |     },
 9 | };
10 | 
11 | impl WorkspaceContext {
12 |     #[inline]
13 |     pub fn deployable_contracts(&self) -> impl Iterator<Item = &ContractDefinition> {
14 |         self.contract_definitions().into_iter().filter(|c| c.is_deployable_contract())
15 |     }
16 | 
17 |     #[inline]
18 |     pub fn par_deployable_contracts(
19 |         &self,
20 |     ) -> impl IntoParallelIterator<Item = &ContractDefinition> {
21 |         self.contract_definitions().into_iter().filter(|c| c.is_deployable_contract()).par_bridge()
22 |     }
23 | 
24 |     pub fn entrypoints_of_deployable_contracts(&self) -> Vec<&FunctionDefinition> {
25 |         let mut entrypoints = vec![];
26 |         for contract in self.deployable_contracts() {
27 |             if let Some(entrypoint_funcs) = contract.entrypoint_functions(self) {
28 |                 entrypoints.extend(entrypoint_funcs);
29 |             }
30 |         }
31 |         entrypoints
32 |     }
33 | 
34 |     pub fn entrypoints_with_callgraphs(
35 |         &self,
36 |     ) -> Vec<(&FunctionDefinition, Vec<CallGraphConsumer>)> {
37 |         let mut result = vec![];
38 |         for func in self.entrypoints_of_deployable_contracts() {
39 |             let Ok(callgraphs) =
40 |                 CallGraphConsumer::get(self, &[&(func.into())], CallGraphDirection::Inward)
41 |             else {
42 |                 continue;
43 |             };
44 |             result.push((func, callgraphs));
45 |         }
46 |         result
47 |     }
48 | }
49 | 
```

--------------------------------------------------------------------------------
/aderyn_core/templates/mcp-tool-response/project_overview.md:
--------------------------------------------------------------------------------

```markdown
 1 | ## Project Overview
 2 | 
 3 | ### Configuration
 4 | - **Root:** {{ root }}
 5 | - **Source:** {{ source }}
 6 | - **Remappings:**
 7 | {%if remappings.len() > 0 %}
 8 | {% for r in remappings %}
 9 |   - "{{ r }}"
10 | {% endfor %}
11 | {% else %}
12 |   - No remappings found
13 | {% endif %}
14 | 
15 | ### Notes:
16 | - *Root* directory is an absolute path.
17 | - *Remappings* can be relative or absolute. The relative ones are relative to the root.
18 | - Not all solidity files in the root directory are authored by the developer. Some files are 3rd party libraries which should be omitted for analysis unless explicitly pulled as a dependency by other developer authored solidity files.
19 | - *Source* directory is the most important directory of all. It lives inside the *Root* and contains all the solidity contracts that the developer has worked on.
20 | 
21 | Aderyn has determined that there are **{{ compilation_units.len() }} compilation units**. The actual Solc versions itself are not mentioned.
22 | 
23 | Note that the file paths shown are relative to the project's **Root** shown above. Please also note that only a subset of these files are considered included files - those lines of entries are appended with `INCLUDED` keyword.
24 | 
25 | {% for cu in compilation_units %}
26 | ### Compilation Unit {{ loop.index }}:
27 | {% for f in cu.files %}
28 | - {{ f.path }}{% if f.included %} INCLUDED{% endif %}
29 | {% endfor %}
30 | 
31 | {% endfor %}
32 | 
33 | ### Summary:
34 | - Total compilation units: **{{ compilation_units.len() }}**
35 | {% for cu in compilation_units %}
36 | - Compilation Unit {{ loop.index }} has **{{ cu.files.len() }}** files of which **{{ cu.included_count }}** are included.
37 | {% endfor %}
38 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/ast/node_type.rs:
--------------------------------------------------------------------------------

```rust
 1 | use serde::{Deserialize, Serialize};
 2 | 
 3 | pub type NodeID = i64;
 4 | 
 5 | #[derive(Clone, Debug, Deserialize, Serialize, PartialEq, PartialOrd, Eq, Ord, Hash)]
 6 | pub enum NodeType {
 7 |     ArrayTypeName,
 8 |     Assignment,
 9 |     BinaryOperation,
10 |     Block,
11 |     Break,
12 |     Conditional,
13 |     Continue,
14 |     ContractDefinition,
15 |     DoWhileStatement,
16 |     ElementaryTypeName,
17 |     ElementaryTypeNameExpression,
18 |     EmitStatement,
19 |     EnumDefinition,
20 |     EnumValue,
21 |     ErrorDefinition,
22 |     EventDefinition,
23 |     ExpressionStatement,
24 |     ForStatement,
25 |     FunctionCall,
26 |     FunctionCallOptions,
27 |     FunctionDefinition,
28 |     FunctionTypeName,
29 |     Identifier,
30 |     IdentifierPath,
31 |     IfStatement,
32 |     ImportDirective,
33 |     IndexAccess,
34 |     IndexRangeAccess,
35 |     InheritanceSpecifier,
36 |     InlineAssembly,
37 |     Literal,
38 |     Mapping,
39 |     MemberAccess,
40 |     ModifierDefinition,
41 |     ModifierInvocation,
42 |     NewExpression,
43 |     OverrideSpecifier,
44 |     ParameterList,
45 |     PlaceholderStatement,
46 |     PragmaDirective,
47 |     Return,
48 |     RevertStatement,
49 |     SourceUnit,
50 |     StructDefinition,
51 |     StructuredDocumentation,
52 |     Throw, // suppports deserialization of older solidity code
53 |     TryCatchClause,
54 |     TryStatement,
55 |     TupleExpression,
56 |     UnaryOperation,
57 |     UncheckedBlock,
58 |     UserDefinedTypeName,
59 |     UserDefinedValueTypeDefinition,
60 |     UsingForDirective,
61 |     VariableDeclaration,
62 |     VariableDeclarationStatement,
63 |     WhileStatement,
64 |     YulAssignment,
65 |     YulBlock,
66 |     YulCase,
67 |     YulExpressionStatement,
68 |     YulFunctionCall,
69 |     YulIdentifier,
70 |     YulLiteral,
71 |     YulSwitch,
72 |     YulTypedName,
73 |     YulVariableDeclaration,
74 | }
75 | 
```

--------------------------------------------------------------------------------
/aderyn/src/birdsong.rs:
--------------------------------------------------------------------------------

```rust
 1 | use indoc::indoc;
 2 | 
 3 | pub const MESSAGES: [&str; 8] = [
 4 |     indoc! {"
 5 |         Aderyn saved you hours of headaches.
 6 |         ☕ Buy us a virtual coffee with a GitHub star:
 7 |     "},
 8 |     indoc! {"
 9 |         🐦 Aderyn finds bugs. You write safer code.
10 |         ⭐ Star us on GitHub if that sounds fair:
11 |     "},
12 |     indoc! {"
13 |         🛡️ Together we make Solidity safer.
14 |         ✨ Support open-source security — star Aderyn:
15 |     "},
16 |     indoc! {"
17 |         ✔  Done! Fast, clean, effective.
18 |         ⭐ Support the project with a star:
19 |     "},
20 |     indoc! {"
21 |         🌱 Aderyn is growing with community support.
22 |         Help others discover it — drop a star on GitHub:
23 |     "},
24 |     indoc! {"
25 |         ✔ Aderyn did its job. Solidity's a bit safer now.
26 |         💫 Like the tool? A star on GitHub goes a long way:
27 |     "},
28 |     indoc! {"
29 |         🪶 Aderyn spotted all it could. Stay secure.
30 |         If our little bird helped you out, give it a perch with a GitHub Star ⭐
31 |     "},
32 |     indoc! {"
33 |         💡 Did Aderyn help you today?
34 |         Show some love with a quick star on GitHub Star ⭐
35 |     "},
36 | ];
37 | 
38 | use std::time::{SystemTime, UNIX_EPOCH};
39 | 
40 | pub fn print_last_words() {
41 |     let random_in_range = |min: usize, max: usize| -> usize {
42 |         let now =
43 |             SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards").as_nanos();
44 | 
45 |         let hash = (now ^ (now >> 3) ^ (now << 7)) as usize;
46 |         min + (hash % (max - min))
47 |     };
48 |     let message_idx = random_in_range(0, MESSAGES.len());
49 |     let message = MESSAGES[message_idx];
50 |     print!("\n{}", message);
51 |     println!("https://github.com/Cyfrin/aderyn");
52 | }
53 | 
```

--------------------------------------------------------------------------------
/benchmarks/aderyn/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[93792368.0,125797761.0,96254770.0,102374608.0,96493368.0,94031566.0,92396047.0,92177740.0,143306731.0,117915483.0,116549204.0,120464727.0,119302292.0,103040968.0,111625647.0,100710330.0,95988974.0,100853519.0,103700207.0,96537843.0,102143255.0,99264821.0,104100188.0,103455867.0,190820242.0,199394390.0,142701189.0,100542974.0,91910714.0,93222451.0,92382061.0,93195709.0,92210554.0,92074295.0,93916028.0,94650533.0,95918744.0,93382773.0,89506898.0,93195935.0,91561765.0,91837441.0,104168599.0,103359199.0,113947329.0,109202194.0,95463817.0,91603965.0,97421558.0,132146204.0,125159248.0,99479231.0,93373712.0,92970819.0,94648268.0,100649670.0,105911313.0,114752590.0,112190279.0,116569945.0,101618637.0,100205137.0,99485415.0,103899776.0,104103036.0,105496380.0,117068490.0,114958188.0,119318918.0,114960419.0,102964747.0,119196332.0,149610159.0,139797727.0,122250300.0,120796880.0,241071573.0,156090165.0,160000214.0,137333096.0,137873192.0,139612525.0,146369137.0,127092104.0,109784544.0,115614577.0,114103645.0,115323101.0,126611514.0,159452369.0,124081522.0,117945249.0,116389840.0,120472367.0,115915601.0,163522498.0,114205847.0,172101235.0,111150712.0,121448947.0]}
```

--------------------------------------------------------------------------------
/benchmarks/aderyn/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Flat","iters":[1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0],"times":[93792368.0,125797761.0,96254770.0,102374608.0,96493368.0,94031566.0,92396047.0,92177740.0,143306731.0,117915483.0,116549204.0,120464727.0,119302292.0,103040968.0,111625647.0,100710330.0,95988974.0,100853519.0,103700207.0,96537843.0,102143255.0,99264821.0,104100188.0,103455867.0,190820242.0,199394390.0,142701189.0,100542974.0,91910714.0,93222451.0,92382061.0,93195709.0,92210554.0,92074295.0,93916028.0,94650533.0,95918744.0,93382773.0,89506898.0,93195935.0,91561765.0,91837441.0,104168599.0,103359199.0,113947329.0,109202194.0,95463817.0,91603965.0,97421558.0,132146204.0,125159248.0,99479231.0,93373712.0,92970819.0,94648268.0,100649670.0,105911313.0,114752590.0,112190279.0,116569945.0,101618637.0,100205137.0,99485415.0,103899776.0,104103036.0,105496380.0,117068490.0,114958188.0,119318918.0,114960419.0,102964747.0,119196332.0,149610159.0,139797727.0,122250300.0,120796880.0,241071573.0,156090165.0,160000214.0,137333096.0,137873192.0,139612525.0,146369137.0,127092104.0,109784544.0,115614577.0,114103645.0,115323101.0,126611514.0,159452369.0,124081522.0,117945249.0,116389840.0,120472367.0,115915601.0,163522498.0,114205847.0,172101235.0,111150712.0,121448947.0]}
```

--------------------------------------------------------------------------------
/tests/ast/short_type_name.json:
--------------------------------------------------------------------------------

```json
1 | {"absolutePath":"a","exportedSymbols":{"c":[11]},"id":12,"nodeType":"SourceUnit","nodes":[{"abstract":false,"baseContracts":[],"canonicalName":"c","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":11,"linearizedBaseContracts":[11],"name":"c","nameLocation":"9:1:1","nodeType":"ContractDefinition","nodes":[{"body":{"id":9,"nodeType":"Block","src":"33:20:1","statements":[{"assignments":[7],"declarations":[{"constant":false,"id":7,"mutability":"mutable","name":"x","nameLocation":"49:1:1","nodeType":"VariableDeclaration","scope":9,"src":"35:15:1","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_memory_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":5,"name":"uint","nodeType":"ElementaryTypeName","src":"35:4:1","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":6,"nodeType":"ArrayTypeName","src":"35:6:1","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"id":8,"nodeType":"VariableDeclarationStatement","src":"35:15:1"}]},"functionSelector":"26121ff0","id":10,"implemented":true,"kind":"function","modifiers":[],"name":"f","nameLocation":"22:1:1","nodeType":"FunctionDefinition","parameters":{"id":1,"nodeType":"ParameterList","parameters":[],"src":"23:2:1"},"returnParameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"33:0:1"},"scope":11,"src":"13:40:1","stateMutability":"nonpayable","virtual":false,"visibility":"public"}],"scope":12,"src":"0:55:1","usedErrors":[]}],"src":"0:56:1"}
2 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/context/graph/callgraph/utils.rs:
--------------------------------------------------------------------------------

```rust
 1 | use super::*;
 2 | use crate::context::workspace::{ASTNode, WorkspaceContext};
 3 | 
 4 | impl CallGraphConsumer {
 5 |     /// Legacy method
 6 |     ///
 7 |     /// Creates a [`CallGraphConsumer`] that can explore paths from given nodes.
 8 |     pub(super) fn from_nodes(
 9 |         context: &WorkspaceContext,
10 |         nodes: &[&ASTNode],
11 |         direction: CallGraphDirection,
12 |     ) -> super::Result<CallGraphConsumer> {
13 |         Ok(CallGraphConsumer {
14 |             entry_points: legacy::derive_entry_points(nodes)?,
15 |             inward_surface_points: legacy::derive_inward_surface_points_legacy(context, nodes),
16 |             outward_surface_points: legacy::derive_outward_surface_points(context, nodes),
17 |             direction,
18 |             base_contract: None,
19 |         })
20 |     }
21 | 
22 |     /// New method
23 |     ///
24 |     /// Creates a [`CallGraphConsumer`] that can explore paths from given nodes.
25 |     pub(super) fn many_from_nodes(
26 |         context: &WorkspaceContext,
27 |         nodes: &[&ASTNode],
28 |         direction: CallGraphDirection,
29 |     ) -> super::Result<Vec<CallGraphConsumer>> {
30 |         let mut cg_consumers = vec![];
31 |         let cg_points = new::derive_surface_points(context, nodes);
32 |         for (contract_id, points) in cg_points.points {
33 |             cg_consumers.push(CallGraphConsumer {
34 |                 entry_points: points.entry.into_iter().collect(),
35 |                 inward_surface_points: points.inward.into_iter().collect(),
36 |                 outward_surface_points: points.outward.into_iter().collect(),
37 |                 direction: direction.clone(),
38 |                 base_contract: Some(contract_id),
39 |             });
40 |         }
41 |         Ok(cg_consumers)
42 |     }
43 | }
44 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/context/graph.rs:
--------------------------------------------------------------------------------

```rust
 1 | mod callgraph;
 2 | mod preprocess;
 3 | mod traits;
 4 | mod utils;
 5 | 
 6 | use std::collections::HashMap;
 7 | 
 8 | pub use callgraph::*;
 9 | pub use traits::*;
10 | 
11 | use derive_more::From;
12 | 
13 | use crate::ast::{ASTNode, NodeID};
14 | 
15 | pub type Result<T> = core::result::Result<T, Error>;
16 | 
17 | #[derive(Debug)]
18 | pub struct LegacyWorkspaceCallGraph {
19 |     pub raw_callgraph: RawCallGraph,
20 | }
21 | 
22 | #[derive(Debug, Default)]
23 | pub struct WorkspaceCallGraphs {
24 |     // Key => Contract Definition NodeID
25 |     pub inward_callgraphs: HashMap<NodeID, RawCallGraph>,
26 |     pub outward_callgraphs: HashMap<NodeID, RawCallGraph>,
27 | }
28 | 
29 | /**
30 |  * Every NodeID in RawCallGraph should corresponds to [`crate::ast::FunctionDefinition`] or
31 |  * [`crate::ast::ModifierDefinition`]
32 |  */
33 | pub type RawCallGraph = HashMap<NodeID, Vec<NodeID>>;
34 | 
35 | #[derive(Debug, From)]
36 | pub enum Error {
37 |     #[from]
38 |     Custom(String),
39 | 
40 |     // region: -- standard::* errors
41 |     WorkspaceCallGraphDFSError,
42 |     InwardCallgraphNotAvailable,
43 |     OutwardCallgraphNotAvailable,
44 |     UnidentifiedEntryPointNode(ASTNode),
45 |     InvalidEntryPointId(NodeID),
46 |     EntryPointVisitError,
47 |     OutwardFunctionDefinitionVisitError,
48 |     OutwardModifierDefinitionVisitError,
49 |     InwardFunctionDefinitionVisitError,
50 |     InwardModifierDefinitionVisitError,
51 |     OutwardSideEffectFunctionDefinitionVisitError,
52 |     OutwardSideEffectModifierDefinitionVisitError,
53 |     // endregion
54 | }
55 | 
56 | impl core::fmt::Display for Error {
57 |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
58 |         write!(f, "{self:?}")
59 |     }
60 | }
61 | 
62 | impl From<&str> for Error {
63 |     fn from(value: &str) -> Self {
64 |         Error::Custom(value.to_string())
65 |     }
66 | }
67 | 
68 | impl std::error::Error for Error {}
69 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/detect/high/misused_boolean.rs:
--------------------------------------------------------------------------------

```rust
 1 | use crate::{detect::helpers::is_constant_boolean, issue_detector};
 2 | use eyre::Result;
 3 | 
 4 | issue_detector! {
 5 |     MisusedBooleanDetector;
 6 | 
 7 |     severity: High,
 8 |     title: "Misused boolean with logical operators",
 9 |     desc: "The patterns `if (… || true)` and `if (.. && false)` will always evaluate to true and false respectively.",
10 |     name: MisusedBoolean,
11 | 
12 |     |context| {
13 |         for binary_operation in context.binary_operations() {
14 |             if (binary_operation.operator == "||" || binary_operation.operator == "&&")
15 |                 && [
16 |                     binary_operation.left_expression.as_ref(),
17 |                     binary_operation.right_expression.as_ref(),
18 |                 ]
19 |                 .iter()
20 |                 .any(|&operand| is_constant_boolean(context, operand))
21 |             {
22 |                 grab!(binary_operation);
23 |             }
24 | 
25 |         }
26 | 
27 |         for if_statement in context.if_statements()
28 |             .iter()
29 |             .filter(|statement| is_constant_boolean(context, &statement.condition)) {
30 |             grab!(if_statement);
31 |         }
32 | 
33 |     }
34 | 
35 | }
36 | 
37 | #[cfg(test)]
38 | mod misused_boolean_tests {
39 | 
40 |     use crate::detect::{detector::IssueDetector, high::misused_boolean::MisusedBooleanDetector};
41 | 
42 |     #[test]
43 |     fn test_misused_boolean_by_loading_contract_directly() {
44 |         let context = crate::detect::test_utils::load_solidity_source_unit(
45 |             "../tests/contract-playground/src/MisusedBoolean.sol",
46 |         );
47 | 
48 |         let mut detector = MisusedBooleanDetector::default();
49 |         let found = detector.detect(&context).unwrap();
50 |         assert!(found);
51 |         assert_eq!(detector.instances().len(), 10);
52 |     }
53 | }
54 | 
```

--------------------------------------------------------------------------------
/benchmarks/constants-instead-of-literals/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],"times":[1530154.0,3786403.0,4780065.0,6216677.0,8035474.0,8938606.0,10593770.0,12056631.0,13282303.0,14929757.0,16174241.0,17504075.0,18869312.0,19023353.0,22679148.0,22519825.0,23774477.0,24889277.0,27175643.0,27833145.0,27844391.0,29172203.0,30801785.0,31952963.0,33003466.0,36186822.0,37326592.0,37893290.0,42988748.0,56336444.0,57137096.0,55538151.0,52398523.0,55036494.0,54236353.0,54891861.0,54070748.0,54155193.0,53985735.0,59019625.0,61193547.0,62909028.0,63334642.0,62950312.0,63861801.0,62503226.0,69195132.0,74584832.0,72419454.0,72525201.0,68655217.0,70553653.0,72501885.0,72573705.0,73268430.0,74415913.0,78268192.0,80314832.0,82486034.0,80097578.0,84251529.0,86143500.0,87706901.0,89353993.0,88609606.0,89144200.0,92110952.0,90592715.0,93340835.0,93799346.0,95116589.0,96573241.0,97644534.0,100361460.0,100967200.0,102238249.0,101520321.0,104297523.0,107496632.0,108144837.0,110091121.0,115870072.0,132701223.0,112406516.0,123351023.0,126283323.0,121591944.0,120108621.0,121501350.0,122774954.0,126387079.0,123549593.0,137655095.0,133832134.0,125641323.0,122604778.0,123774041.0,126619019.0,124813813.0,124270673.0]}
```

--------------------------------------------------------------------------------
/benchmarks/constants-instead-of-literals/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],"times":[1530154.0,3786403.0,4780065.0,6216677.0,8035474.0,8938606.0,10593770.0,12056631.0,13282303.0,14929757.0,16174241.0,17504075.0,18869312.0,19023353.0,22679148.0,22519825.0,23774477.0,24889277.0,27175643.0,27833145.0,27844391.0,29172203.0,30801785.0,31952963.0,33003466.0,36186822.0,37326592.0,37893290.0,42988748.0,56336444.0,57137096.0,55538151.0,52398523.0,55036494.0,54236353.0,54891861.0,54070748.0,54155193.0,53985735.0,59019625.0,61193547.0,62909028.0,63334642.0,62950312.0,63861801.0,62503226.0,69195132.0,74584832.0,72419454.0,72525201.0,68655217.0,70553653.0,72501885.0,72573705.0,73268430.0,74415913.0,78268192.0,80314832.0,82486034.0,80097578.0,84251529.0,86143500.0,87706901.0,89353993.0,88609606.0,89144200.0,92110952.0,90592715.0,93340835.0,93799346.0,95116589.0,96573241.0,97644534.0,100361460.0,100967200.0,102238249.0,101520321.0,104297523.0,107496632.0,108144837.0,110091121.0,115870072.0,132701223.0,112406516.0,123351023.0,126283323.0,121591944.0,120108621.0,121501350.0,122774954.0,126387079.0,123549593.0,137655095.0,133832134.0,125641323.0,122604778.0,123774041.0,126619019.0,124813813.0,124270673.0]}
```

--------------------------------------------------------------------------------
/benchmarks/inconsistent-type-names/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],"times":[1391819.0,3386217.0,4477651.0,6524564.0,7318024.0,9048109.0,9425488.0,11788924.0,12828796.0,13837872.0,15116400.0,16509303.0,17964175.0,19454366.0,20834586.0,22690938.0,24731256.0,24470341.0,51938004.0,34618273.0,33539975.0,35307362.0,33854398.0,43262153.0,33239567.0,34581602.0,38079560.0,37190004.0,39196121.0,41439007.0,45214454.0,52692402.0,84566651.0,81819636.0,175764715.0,69021524.0,64483921.0,74659844.0,87088671.0,61066938.0,73088726.0,62188662.0,97479725.0,71287929.0,76791498.0,73379120.0,72118482.0,72526746.0,74200748.0,69667915.0,70815119.0,73712764.0,129778210.0,104212871.0,92037879.0,89621704.0,94037949.0,98800282.0,93295515.0,99444742.0,96661099.0,207670202.0,119110134.0,124353249.0,133843290.0,98900375.0,99755899.0,104107496.0,115668505.0,121691129.0,133149960.0,126631987.0,118332600.0,113460003.0,118194027.0,116893945.0,117890680.0,120412950.0,121675553.0,142772487.0,125229628.0,129010023.0,123035780.0,142395818.0,152111201.0,127373286.0,130579969.0,129336934.0,145881032.0,142304156.0,170626431.0,176995000.0,136790746.0,129906996.0,140958540.0,164265694.0,170057358.0,144300927.0,139602643.0,140552634.0]}
```

--------------------------------------------------------------------------------
/benchmarks/inconsistent-type-names/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,10.0,11.0,12.0,13.0,14.0,15.0,16.0,17.0,18.0,19.0,20.0,21.0,22.0,23.0,24.0,25.0,26.0,27.0,28.0,29.0,30.0,31.0,32.0,33.0,34.0,35.0,36.0,37.0,38.0,39.0,40.0,41.0,42.0,43.0,44.0,45.0,46.0,47.0,48.0,49.0,50.0,51.0,52.0,53.0,54.0,55.0,56.0,57.0,58.0,59.0,60.0,61.0,62.0,63.0,64.0,65.0,66.0,67.0,68.0,69.0,70.0,71.0,72.0,73.0,74.0,75.0,76.0,77.0,78.0,79.0,80.0,81.0,82.0,83.0,84.0,85.0,86.0,87.0,88.0,89.0,90.0,91.0,92.0,93.0,94.0,95.0,96.0,97.0,98.0,99.0,100.0],"times":[1391819.0,3386217.0,4477651.0,6524564.0,7318024.0,9048109.0,9425488.0,11788924.0,12828796.0,13837872.0,15116400.0,16509303.0,17964175.0,19454366.0,20834586.0,22690938.0,24731256.0,24470341.0,51938004.0,34618273.0,33539975.0,35307362.0,33854398.0,43262153.0,33239567.0,34581602.0,38079560.0,37190004.0,39196121.0,41439007.0,45214454.0,52692402.0,84566651.0,81819636.0,175764715.0,69021524.0,64483921.0,74659844.0,87088671.0,61066938.0,73088726.0,62188662.0,97479725.0,71287929.0,76791498.0,73379120.0,72118482.0,72526746.0,74200748.0,69667915.0,70815119.0,73712764.0,129778210.0,104212871.0,92037879.0,89621704.0,94037949.0,98800282.0,93295515.0,99444742.0,96661099.0,207670202.0,119110134.0,124353249.0,133843290.0,98900375.0,99755899.0,104107496.0,115668505.0,121691129.0,133149960.0,126631987.0,118332600.0,113460003.0,118194027.0,116893945.0,117890680.0,120412950.0,121675553.0,142772487.0,125229628.0,129010023.0,123035780.0,142395818.0,152111201.0,127373286.0,130579969.0,129336934.0,145881032.0,142304156.0,170626431.0,176995000.0,136790746.0,129906996.0,140958540.0,164265694.0,170057358.0,144300927.0,139602643.0,140552634.0]}
```

--------------------------------------------------------------------------------
/aderyn_core/tests/common/new_ast_nodes.rs:
--------------------------------------------------------------------------------

```rust
 1 | use std::{collections::BTreeMap, error::Error};
 2 | 
 3 | use aderyn_core::{
 4 |     ast::NodeID,
 5 |     capture,
 6 |     context::workspace::WorkspaceContext,
 7 |     detect::detector::{IssueDetector, IssueDetectorNamePool, IssueSeverity},
 8 | };
 9 | use eyre::Result;
10 | 
11 | #[derive(Default)]
12 | pub struct NewASTNodesDemonstrator {
13 |     // Keys are: [0] source file name, [1] line number, [2] character location of node.
14 |     // Do not add items manually, use `capture!` to add nodes to this BTreeMap.
15 |     found_instances: BTreeMap<(String, usize, String), NodeID>,
16 | }
17 | 
18 | impl IssueDetector for NewASTNodesDemonstrator {
19 |     fn detect(&mut self, context: &WorkspaceContext) -> Result<bool, Box<dyn Error>> {
20 |         for do_while_statement in context.do_while_statements() {
21 |             capture!(self, context, do_while_statement);
22 |         }
23 | 
24 |         for break_statement in context.breaks() {
25 |             capture!(self, context, break_statement);
26 |         }
27 | 
28 |         for continue_statements in context.continues() {
29 |             capture!(self, context, continue_statements);
30 |         }
31 | 
32 |         for placeholder_statement in context.placeholder_statements() {
33 |             capture!(self, context, placeholder_statement);
34 |         }
35 | 
36 |         Ok(!self.found_instances.is_empty())
37 |     }
38 | 
39 |     fn severity(&self) -> IssueSeverity {
40 |         IssueSeverity::High
41 |     }
42 | 
43 |     fn title(&self) -> String {
44 |         String::from("New AST Nodes Demo")
45 |     }
46 | 
47 |     fn description(&self) -> String {
48 |         String::from("New AST Nodes Demo")
49 |     }
50 | 
51 |     fn instances(&self) -> BTreeMap<(String, usize, String), NodeID> {
52 |         self.found_instances.clone()
53 |     }
54 | 
55 |     fn name(&self) -> String {
56 |         format!("{}", IssueDetectorNamePool::CentralizationRisk)
57 |     }
58 | }
59 | 
```

--------------------------------------------------------------------------------
/aderyn_driver/src/interface/json.rs:
--------------------------------------------------------------------------------

```rust
 1 | use std::io::{Result, Write};
 2 | 
 3 | use aderyn_core::{context::workspace::WorkspaceContext, report::*};
 4 | use serde::Serialize;
 5 | 
 6 | use super::util::files_details;
 7 | 
 8 | #[derive(Serialize)]
 9 | pub struct JsonContent {
10 |     files_summary: FilesSummary,
11 |     files_details: FilesDetails,
12 |     issue_count: IssueCount,
13 |     high_issues: HighIssues,
14 |     low_issues: LowIssues,
15 |     detectors_used: Vec<String>,
16 | }
17 | 
18 | pub fn print_report(
19 |     writer: &mut Box<dyn Write>,
20 |     report: &Report,
21 |     contexts: &[WorkspaceContext],
22 |     stdout: bool,
23 |     detectors_used: &[(String, String)],
24 | ) -> Result<()> {
25 |     let mut all_files_details = FilesDetails::default();
26 |     for context in contexts {
27 |         all_files_details = all_files_details + &files_details(context);
28 |     }
29 | 
30 |     all_files_details.files_details.sort_by(|a, b| a.file_path.cmp(&b.file_path));
31 | 
32 |     let mut all_files_summary = FilesSummary::default();
33 |     for details in &all_files_details.files_details {
34 |         all_files_summary.total_sloc += details.n_sloc;
35 |         all_files_summary.total_source_units += 1;
36 |     }
37 | 
38 |     let detectors_used_names: Vec<_> = detectors_used.iter().map(|x| x.0.clone()).collect();
39 |     let (high_issues, low_issues) = report.detailed_issues(contexts);
40 | 
41 |     let content = JsonContent {
42 |         files_summary: all_files_summary,
43 |         files_details: all_files_details,
44 |         issue_count: report.issue_count(),
45 |         high_issues,
46 |         low_issues,
47 |         detectors_used: detectors_used_names,
48 |     };
49 |     let value = serde_json::to_value(content).unwrap();
50 | 
51 |     if stdout {
52 |         println!("STDOUT START");
53 |     }
54 | 
55 |     serde_json::to_writer_pretty(writer, &value)?;
56 | 
57 |     if stdout {
58 |         println!("STDOUT END");
59 |     }
60 | 
61 |     Ok(())
62 | }
63 | 
```

--------------------------------------------------------------------------------
/benchmarks/deprecated-oz-functions/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[4.0,8.0,12.0,16.0,20.0,24.0,28.0,32.0,36.0,40.0,44.0,48.0,52.0,56.0,60.0,64.0,68.0,72.0,76.0,80.0,84.0,88.0,92.0,96.0,100.0,104.0,108.0,112.0,116.0,120.0,124.0,128.0,132.0,136.0,140.0,144.0,148.0,152.0,156.0,160.0,164.0,168.0,172.0,176.0,180.0,184.0,188.0,192.0,196.0,200.0,204.0,208.0,212.0,216.0,220.0,224.0,228.0,232.0,236.0,240.0,244.0,248.0,252.0,256.0,260.0,264.0,268.0,272.0,276.0,280.0,284.0,288.0,292.0,296.0,300.0,304.0,308.0,312.0,316.0,320.0,324.0,328.0,332.0,336.0,340.0,344.0,348.0,352.0,356.0,360.0,364.0,368.0,372.0,376.0,380.0,384.0,388.0,392.0,396.0,400.0],"times":[1006510.0,2215152.0,3554716.0,4091990.0,5682613.0,6453365.0,7378327.0,8576627.0,9162264.0,10448454.0,11841783.0,12369392.0,13755864.0,14934742.0,15769384.0,16912640.0,17866343.0,18819957.0,19546146.0,20323796.0,21871599.0,25998587.0,24459712.0,25451519.0,26503399.0,27998613.0,31016497.0,40031024.0,36484818.0,40100119.0,38170212.0,79382198.0,46196325.0,39817230.0,38996227.0,38256820.0,40031103.0,40157996.0,42311847.0,39953932.0,41063187.0,42875381.0,45232392.0,44978101.0,46220347.0,47492029.0,48234010.0,50640185.0,52980246.0,52544943.0,52943090.0,54531563.0,80220163.0,116678060.0,56704130.0,57294197.0,57616697.0,61569779.0,60583445.0,61911680.0,66197857.0,63650080.0,69220801.0,93385989.0,78508870.0,69736597.0,78440192.0,75193062.0,77014532.0,73363708.0,72154190.0,74834161.0,75361865.0,75955572.0,77350895.0,78755665.0,80450993.0,82012860.0,80534978.0,80945942.0,82131572.0,84042498.0,82119901.0,85942303.0,87461865.0,83723538.0,86455348.0,88364880.0,87961076.0,90837976.0,90795692.0,92697807.0,91741233.0,94072382.0,95374844.0,106116490.0,98876275.0,99070286.0,98539711.0,100832687.0]}
```

--------------------------------------------------------------------------------
/benchmarks/deprecated-oz-functions/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[4.0,8.0,12.0,16.0,20.0,24.0,28.0,32.0,36.0,40.0,44.0,48.0,52.0,56.0,60.0,64.0,68.0,72.0,76.0,80.0,84.0,88.0,92.0,96.0,100.0,104.0,108.0,112.0,116.0,120.0,124.0,128.0,132.0,136.0,140.0,144.0,148.0,152.0,156.0,160.0,164.0,168.0,172.0,176.0,180.0,184.0,188.0,192.0,196.0,200.0,204.0,208.0,212.0,216.0,220.0,224.0,228.0,232.0,236.0,240.0,244.0,248.0,252.0,256.0,260.0,264.0,268.0,272.0,276.0,280.0,284.0,288.0,292.0,296.0,300.0,304.0,308.0,312.0,316.0,320.0,324.0,328.0,332.0,336.0,340.0,344.0,348.0,352.0,356.0,360.0,364.0,368.0,372.0,376.0,380.0,384.0,388.0,392.0,396.0,400.0],"times":[1006510.0,2215152.0,3554716.0,4091990.0,5682613.0,6453365.0,7378327.0,8576627.0,9162264.0,10448454.0,11841783.0,12369392.0,13755864.0,14934742.0,15769384.0,16912640.0,17866343.0,18819957.0,19546146.0,20323796.0,21871599.0,25998587.0,24459712.0,25451519.0,26503399.0,27998613.0,31016497.0,40031024.0,36484818.0,40100119.0,38170212.0,79382198.0,46196325.0,39817230.0,38996227.0,38256820.0,40031103.0,40157996.0,42311847.0,39953932.0,41063187.0,42875381.0,45232392.0,44978101.0,46220347.0,47492029.0,48234010.0,50640185.0,52980246.0,52544943.0,52943090.0,54531563.0,80220163.0,116678060.0,56704130.0,57294197.0,57616697.0,61569779.0,60583445.0,61911680.0,66197857.0,63650080.0,69220801.0,93385989.0,78508870.0,69736597.0,78440192.0,75193062.0,77014532.0,73363708.0,72154190.0,74834161.0,75361865.0,75955572.0,77350895.0,78755665.0,80450993.0,82012860.0,80534978.0,80945942.0,82131572.0,84042498.0,82119901.0,85942303.0,87461865.0,83723538.0,86455348.0,88364880.0,87961076.0,90837976.0,90795692.0,92697807.0,91741233.0,94072382.0,95374844.0,106116490.0,98876275.0,99070286.0,98539711.0,100832687.0]}
```

--------------------------------------------------------------------------------
/benchmarks/unsafe-oz-erc721-mint/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[4.0,8.0,12.0,16.0,20.0,24.0,28.0,32.0,36.0,40.0,44.0,48.0,52.0,56.0,60.0,64.0,68.0,72.0,76.0,80.0,84.0,88.0,92.0,96.0,100.0,104.0,108.0,112.0,116.0,120.0,124.0,128.0,132.0,136.0,140.0,144.0,148.0,152.0,156.0,160.0,164.0,168.0,172.0,176.0,180.0,184.0,188.0,192.0,196.0,200.0,204.0,208.0,212.0,216.0,220.0,224.0,228.0,232.0,236.0,240.0,244.0,248.0,252.0,256.0,260.0,264.0,268.0,272.0,276.0,280.0,284.0,288.0,292.0,296.0,300.0,304.0,308.0,312.0,316.0,320.0,324.0,328.0,332.0,336.0,340.0,344.0,348.0,352.0,356.0,360.0,364.0,368.0,372.0,376.0,380.0,384.0,388.0,392.0,396.0,400.0],"times":[1217657.0,2578056.0,3678272.0,5396967.0,6240342.0,7673479.0,8953748.0,10332341.0,11527918.0,12846885.0,13964638.0,15363066.0,16522014.0,17838692.0,19179640.0,20383354.0,21772475.0,22831548.0,23967026.0,25546332.0,27156891.0,28342264.0,29395068.0,30246068.0,31688536.0,33043581.0,34176167.0,35493362.0,36780720.0,37919396.0,39178948.0,40238846.0,41878092.0,43366058.0,43944025.0,45694997.0,46568653.0,49475438.0,52992358.0,50658895.0,52193484.0,52944541.0,54294497.0,55789685.0,56593977.0,58823719.0,59678647.0,61536366.0,60857253.0,60432681.0,61538350.0,62913822.0,63883507.0,65248040.0,66405421.0,68498317.0,78434185.0,79743620.0,73589995.0,72664302.0,74058195.0,74912221.0,76067380.0,77365287.0,78568309.0,79449234.0,77985304.0,78972679.0,80147792.0,81313549.0,82535488.0,83711806.0,85631026.0,85462429.0,84040074.0,85211222.0,86288709.0,86409635.0,85436949.0,86498918.0,87574242.0,88898044.0,89914044.0,90867720.0,92363955.0,92086421.0,90933841.0,91657079.0,93026676.0,101770620.0,94664576.0,93002023.0,93777285.0,94378618.0,95129671.0,94842152.0,95077931.0,95879746.0,96925721.0,97984955.0]}
```

--------------------------------------------------------------------------------
/benchmarks/unsafe-oz-erc721-mint/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[4.0,8.0,12.0,16.0,20.0,24.0,28.0,32.0,36.0,40.0,44.0,48.0,52.0,56.0,60.0,64.0,68.0,72.0,76.0,80.0,84.0,88.0,92.0,96.0,100.0,104.0,108.0,112.0,116.0,120.0,124.0,128.0,132.0,136.0,140.0,144.0,148.0,152.0,156.0,160.0,164.0,168.0,172.0,176.0,180.0,184.0,188.0,192.0,196.0,200.0,204.0,208.0,212.0,216.0,220.0,224.0,228.0,232.0,236.0,240.0,244.0,248.0,252.0,256.0,260.0,264.0,268.0,272.0,276.0,280.0,284.0,288.0,292.0,296.0,300.0,304.0,308.0,312.0,316.0,320.0,324.0,328.0,332.0,336.0,340.0,344.0,348.0,352.0,356.0,360.0,364.0,368.0,372.0,376.0,380.0,384.0,388.0,392.0,396.0,400.0],"times":[1217657.0,2578056.0,3678272.0,5396967.0,6240342.0,7673479.0,8953748.0,10332341.0,11527918.0,12846885.0,13964638.0,15363066.0,16522014.0,17838692.0,19179640.0,20383354.0,21772475.0,22831548.0,23967026.0,25546332.0,27156891.0,28342264.0,29395068.0,30246068.0,31688536.0,33043581.0,34176167.0,35493362.0,36780720.0,37919396.0,39178948.0,40238846.0,41878092.0,43366058.0,43944025.0,45694997.0,46568653.0,49475438.0,52992358.0,50658895.0,52193484.0,52944541.0,54294497.0,55789685.0,56593977.0,58823719.0,59678647.0,61536366.0,60857253.0,60432681.0,61538350.0,62913822.0,63883507.0,65248040.0,66405421.0,68498317.0,78434185.0,79743620.0,73589995.0,72664302.0,74058195.0,74912221.0,76067380.0,77365287.0,78568309.0,79449234.0,77985304.0,78972679.0,80147792.0,81313549.0,82535488.0,83711806.0,85631026.0,85462429.0,84040074.0,85211222.0,86288709.0,86409635.0,85436949.0,86498918.0,87574242.0,88898044.0,89914044.0,90867720.0,92363955.0,92086421.0,90933841.0,91657079.0,93026676.0,101770620.0,94664576.0,93002023.0,93777285.0,94378618.0,95129671.0,94842152.0,95077931.0,95879746.0,96925721.0,97984955.0]}
```

--------------------------------------------------------------------------------
/benchmarks/block-timestamp-deadline/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[4.0,8.0,12.0,16.0,20.0,24.0,28.0,32.0,36.0,40.0,44.0,48.0,52.0,56.0,60.0,64.0,68.0,72.0,76.0,80.0,84.0,88.0,92.0,96.0,100.0,104.0,108.0,112.0,116.0,120.0,124.0,128.0,132.0,136.0,140.0,144.0,148.0,152.0,156.0,160.0,164.0,168.0,172.0,176.0,180.0,184.0,188.0,192.0,196.0,200.0,204.0,208.0,212.0,216.0,220.0,224.0,228.0,232.0,236.0,240.0,244.0,248.0,252.0,256.0,260.0,264.0,268.0,272.0,276.0,280.0,284.0,288.0,292.0,296.0,300.0,304.0,308.0,312.0,316.0,320.0,324.0,328.0,332.0,336.0,340.0,344.0,348.0,352.0,356.0,360.0,364.0,368.0,372.0,376.0,380.0,384.0,388.0,392.0,396.0,400.0],"times":[1200811.0,2258240.0,4233793.0,4472595.0,5670753.0,7014815.0,8505327.0,8997133.0,10047291.0,10881948.0,11955758.0,13040992.0,14166195.0,15475734.0,16666668.0,17559893.0,18548285.0,19633923.0,20877066.0,21786878.0,22916448.0,23142884.0,24595826.0,25845302.0,26957678.0,28372993.0,30913005.0,34168302.0,35899921.0,36489387.0,36839831.0,38598837.0,39156109.0,39137733.0,38998987.0,39424824.0,41014107.0,42452801.0,42874295.0,42790770.0,44199236.0,44253963.0,46605259.0,49618978.0,55203526.0,55315052.0,55487549.0,59375065.0,52881309.0,53095661.0,53927135.0,54901014.0,56141995.0,57954182.0,59669895.0,66074179.0,67929281.0,68422602.0,70667350.0,66276558.0,67829295.0,68639940.0,69415415.0,70420829.0,71772347.0,73624734.0,75000955.0,76558809.0,76288988.0,77845825.0,79254850.0,80448485.0,82011430.0,83232250.0,83120806.0,84399531.0,87411864.0,87395214.0,87237770.0,90380777.0,89753870.0,91628160.0,91458627.0,94996704.0,96209639.0,95748718.0,96841399.0,99008585.0,100560902.0,100999531.0,103083624.0,103005705.0,107279680.0,107948145.0,109210128.0,111813364.0,111761523.0,111951638.0,142422075.0,119905393.0]}
```

--------------------------------------------------------------------------------
/benchmarks/block-timestamp-deadline/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[4.0,8.0,12.0,16.0,20.0,24.0,28.0,32.0,36.0,40.0,44.0,48.0,52.0,56.0,60.0,64.0,68.0,72.0,76.0,80.0,84.0,88.0,92.0,96.0,100.0,104.0,108.0,112.0,116.0,120.0,124.0,128.0,132.0,136.0,140.0,144.0,148.0,152.0,156.0,160.0,164.0,168.0,172.0,176.0,180.0,184.0,188.0,192.0,196.0,200.0,204.0,208.0,212.0,216.0,220.0,224.0,228.0,232.0,236.0,240.0,244.0,248.0,252.0,256.0,260.0,264.0,268.0,272.0,276.0,280.0,284.0,288.0,292.0,296.0,300.0,304.0,308.0,312.0,316.0,320.0,324.0,328.0,332.0,336.0,340.0,344.0,348.0,352.0,356.0,360.0,364.0,368.0,372.0,376.0,380.0,384.0,388.0,392.0,396.0,400.0],"times":[1200811.0,2258240.0,4233793.0,4472595.0,5670753.0,7014815.0,8505327.0,8997133.0,10047291.0,10881948.0,11955758.0,13040992.0,14166195.0,15475734.0,16666668.0,17559893.0,18548285.0,19633923.0,20877066.0,21786878.0,22916448.0,23142884.0,24595826.0,25845302.0,26957678.0,28372993.0,30913005.0,34168302.0,35899921.0,36489387.0,36839831.0,38598837.0,39156109.0,39137733.0,38998987.0,39424824.0,41014107.0,42452801.0,42874295.0,42790770.0,44199236.0,44253963.0,46605259.0,49618978.0,55203526.0,55315052.0,55487549.0,59375065.0,52881309.0,53095661.0,53927135.0,54901014.0,56141995.0,57954182.0,59669895.0,66074179.0,67929281.0,68422602.0,70667350.0,66276558.0,67829295.0,68639940.0,69415415.0,70420829.0,71772347.0,73624734.0,75000955.0,76558809.0,76288988.0,77845825.0,79254850.0,80448485.0,82011430.0,83232250.0,83120806.0,84399531.0,87411864.0,87395214.0,87237770.0,90380777.0,89753870.0,91628160.0,91458627.0,94996704.0,96209639.0,95748718.0,96841399.0,99008585.0,100560902.0,100999531.0,103083624.0,103005705.0,107279680.0,107948145.0,109210128.0,111813364.0,111761523.0,111951638.0,142422075.0,119905393.0]}
```

--------------------------------------------------------------------------------
/benchmarks/zero-address-check/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[3.0,6.0,9.0,12.0,15.0,18.0,21.0,24.0,27.0,30.0,33.0,36.0,39.0,42.0,45.0,48.0,51.0,54.0,57.0,60.0,63.0,66.0,69.0,72.0,75.0,78.0,81.0,84.0,87.0,90.0,93.0,96.0,99.0,102.0,105.0,108.0,111.0,114.0,117.0,120.0,123.0,126.0,129.0,132.0,135.0,138.0,141.0,144.0,147.0,150.0,153.0,156.0,159.0,162.0,165.0,168.0,171.0,174.0,177.0,180.0,183.0,186.0,189.0,192.0,195.0,198.0,201.0,204.0,207.0,210.0,213.0,216.0,219.0,222.0,225.0,228.0,231.0,234.0,237.0,240.0,243.0,246.0,249.0,252.0,255.0,258.0,261.0,264.0,267.0,270.0,273.0,276.0,279.0,282.0,285.0,288.0,291.0,294.0,297.0,300.0],"times":[1417798.0,3537259.0,4804561.0,5878879.0,7638246.0,9762404.0,10105434.0,11192677.0,12576859.0,13965378.0,15363937.0,16749806.0,18140150.0,19539798.0,20930358.0,22315329.0,23876961.0,25255010.0,26100290.0,27619886.0,28940619.0,30310004.0,31688343.0,33009130.0,34373042.0,35783977.0,37681227.0,38667787.0,39792000.0,40691267.0,42311971.0,43339130.0,44706171.0,46867889.0,48201783.0,49581408.0,50903400.0,52305621.0,53665521.0,54452023.0,55615175.0,56915283.0,58788828.0,60766840.0,62034922.0,63468389.0,65325674.0,66347212.0,68200891.0,68850396.0,70211984.0,71193498.0,72938411.0,73987003.0,74187506.0,74732772.0,76383602.0,77666784.0,78791925.0,80821003.0,81836836.0,83213302.0,84369750.0,85734918.0,87023727.0,88108188.0,86421281.0,87826439.0,89683583.0,92583783.0,94164968.0,97049012.0,95181770.0,96741924.0,97311821.0,102150490.0,104796358.0,104105019.0,132682535.0,104273455.0,105817709.0,107791161.0,108579586.0,109983346.0,111063401.0,112693133.0,113923743.0,114217713.0,116201250.0,118269014.0,118897250.0,121090458.0,122148533.0,122965300.0,124127260.0,127429428.0,134806877.0,135536203.0,127969788.0,131701888.0]}
```

--------------------------------------------------------------------------------
/benchmarks/zero-address-check/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[3.0,6.0,9.0,12.0,15.0,18.0,21.0,24.0,27.0,30.0,33.0,36.0,39.0,42.0,45.0,48.0,51.0,54.0,57.0,60.0,63.0,66.0,69.0,72.0,75.0,78.0,81.0,84.0,87.0,90.0,93.0,96.0,99.0,102.0,105.0,108.0,111.0,114.0,117.0,120.0,123.0,126.0,129.0,132.0,135.0,138.0,141.0,144.0,147.0,150.0,153.0,156.0,159.0,162.0,165.0,168.0,171.0,174.0,177.0,180.0,183.0,186.0,189.0,192.0,195.0,198.0,201.0,204.0,207.0,210.0,213.0,216.0,219.0,222.0,225.0,228.0,231.0,234.0,237.0,240.0,243.0,246.0,249.0,252.0,255.0,258.0,261.0,264.0,267.0,270.0,273.0,276.0,279.0,282.0,285.0,288.0,291.0,294.0,297.0,300.0],"times":[1417798.0,3537259.0,4804561.0,5878879.0,7638246.0,9762404.0,10105434.0,11192677.0,12576859.0,13965378.0,15363937.0,16749806.0,18140150.0,19539798.0,20930358.0,22315329.0,23876961.0,25255010.0,26100290.0,27619886.0,28940619.0,30310004.0,31688343.0,33009130.0,34373042.0,35783977.0,37681227.0,38667787.0,39792000.0,40691267.0,42311971.0,43339130.0,44706171.0,46867889.0,48201783.0,49581408.0,50903400.0,52305621.0,53665521.0,54452023.0,55615175.0,56915283.0,58788828.0,60766840.0,62034922.0,63468389.0,65325674.0,66347212.0,68200891.0,68850396.0,70211984.0,71193498.0,72938411.0,73987003.0,74187506.0,74732772.0,76383602.0,77666784.0,78791925.0,80821003.0,81836836.0,83213302.0,84369750.0,85734918.0,87023727.0,88108188.0,86421281.0,87826439.0,89683583.0,92583783.0,94164968.0,97049012.0,95181770.0,96741924.0,97311821.0,102150490.0,104796358.0,104105019.0,132682535.0,104273455.0,105817709.0,107791161.0,108579586.0,109983346.0,111063401.0,112693133.0,113923743.0,114217713.0,116201250.0,118269014.0,118897250.0,121090458.0,122148533.0,122965300.0,124127260.0,127429428.0,134806877.0,135536203.0,127969788.0,131701888.0]}
```

--------------------------------------------------------------------------------
/benchmarks/useless-public-function/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[3.0,6.0,9.0,12.0,15.0,18.0,21.0,24.0,27.0,30.0,33.0,36.0,39.0,42.0,45.0,48.0,51.0,54.0,57.0,60.0,63.0,66.0,69.0,72.0,75.0,78.0,81.0,84.0,87.0,90.0,93.0,96.0,99.0,102.0,105.0,108.0,111.0,114.0,117.0,120.0,123.0,126.0,129.0,132.0,135.0,138.0,141.0,144.0,147.0,150.0,153.0,156.0,159.0,162.0,165.0,168.0,171.0,174.0,177.0,180.0,183.0,186.0,189.0,192.0,195.0,198.0,201.0,204.0,207.0,210.0,213.0,216.0,219.0,222.0,225.0,228.0,231.0,234.0,237.0,240.0,243.0,246.0,249.0,252.0,255.0,258.0,261.0,264.0,267.0,270.0,273.0,276.0,279.0,282.0,285.0,288.0,291.0,294.0,297.0,300.0],"times":[1416619.0,3563914.0,4334650.0,5810336.0,7535663.0,8807583.0,10983758.0,11417950.0,12635384.0,14039086.0,15433797.0,17167215.0,17801590.0,19212100.0,20530722.0,21880018.0,23254803.0,24623342.0,25992531.0,27339891.0,28725925.0,30059185.0,31423670.0,32797213.0,35240875.0,36699249.0,37993754.0,39474173.0,40869104.0,42207441.0,42779970.0,44862592.0,47373142.0,48712540.0,49917590.0,49594754.0,52729668.0,54950493.0,52811233.0,54258750.0,55562810.0,56952297.0,58303262.0,60158528.0,61156842.0,60736132.0,63487847.0,64457741.0,65786734.0,69038701.0,71176451.0,71564770.0,73677614.0,75286968.0,75806632.0,77311055.0,85053000.0,78495291.0,81644509.0,82306704.0,83633179.0,84917526.0,86307109.0,87760931.0,89021055.0,88448723.0,90173173.0,92217004.0,90796895.0,93747494.0,93368776.0,97703961.0,114238546.0,106331239.0,116839678.0,107583872.0,105348922.0,129913629.0,155824573.0,110890113.0,109966325.0,113571874.0,113181508.0,115993227.0,126998710.0,122661127.0,118153727.0,120638411.0,126338635.0,127170445.0,128958912.0,129464203.0,128498606.0,128316830.0,131899682.0,147619154.0,160016358.0,132953333.0,134185912.0,134923477.0]}
```

--------------------------------------------------------------------------------
/benchmarks/useless-public-function/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[3.0,6.0,9.0,12.0,15.0,18.0,21.0,24.0,27.0,30.0,33.0,36.0,39.0,42.0,45.0,48.0,51.0,54.0,57.0,60.0,63.0,66.0,69.0,72.0,75.0,78.0,81.0,84.0,87.0,90.0,93.0,96.0,99.0,102.0,105.0,108.0,111.0,114.0,117.0,120.0,123.0,126.0,129.0,132.0,135.0,138.0,141.0,144.0,147.0,150.0,153.0,156.0,159.0,162.0,165.0,168.0,171.0,174.0,177.0,180.0,183.0,186.0,189.0,192.0,195.0,198.0,201.0,204.0,207.0,210.0,213.0,216.0,219.0,222.0,225.0,228.0,231.0,234.0,237.0,240.0,243.0,246.0,249.0,252.0,255.0,258.0,261.0,264.0,267.0,270.0,273.0,276.0,279.0,282.0,285.0,288.0,291.0,294.0,297.0,300.0],"times":[1416619.0,3563914.0,4334650.0,5810336.0,7535663.0,8807583.0,10983758.0,11417950.0,12635384.0,14039086.0,15433797.0,17167215.0,17801590.0,19212100.0,20530722.0,21880018.0,23254803.0,24623342.0,25992531.0,27339891.0,28725925.0,30059185.0,31423670.0,32797213.0,35240875.0,36699249.0,37993754.0,39474173.0,40869104.0,42207441.0,42779970.0,44862592.0,47373142.0,48712540.0,49917590.0,49594754.0,52729668.0,54950493.0,52811233.0,54258750.0,55562810.0,56952297.0,58303262.0,60158528.0,61156842.0,60736132.0,63487847.0,64457741.0,65786734.0,69038701.0,71176451.0,71564770.0,73677614.0,75286968.0,75806632.0,77311055.0,85053000.0,78495291.0,81644509.0,82306704.0,83633179.0,84917526.0,86307109.0,87760931.0,89021055.0,88448723.0,90173173.0,92217004.0,90796895.0,93747494.0,93368776.0,97703961.0,114238546.0,106331239.0,116839678.0,107583872.0,105348922.0,129913629.0,155824573.0,110890113.0,109966325.0,113571874.0,113181508.0,115993227.0,126998710.0,122661127.0,118153727.0,120638411.0,126338635.0,127170445.0,128958912.0,129464203.0,128498606.0,128316830.0,131899682.0,147619154.0,160016358.0,132953333.0,134185912.0,134923477.0]}
```

--------------------------------------------------------------------------------
/benchmarks/arbitrary-transfer-from/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[15.0,30.0,45.0,60.0,75.0,90.0,105.0,120.0,135.0,150.0,165.0,180.0,195.0,210.0,225.0,240.0,255.0,270.0,285.0,300.0,315.0,330.0,345.0,360.0,375.0,390.0,405.0,420.0,435.0,450.0,465.0,480.0,495.0,510.0,525.0,540.0,555.0,570.0,585.0,600.0,615.0,630.0,645.0,660.0,675.0,690.0,705.0,720.0,735.0,750.0,765.0,780.0,795.0,810.0,825.0,840.0,855.0,870.0,885.0,900.0,915.0,930.0,945.0,960.0,975.0,990.0,1005.0,1020.0,1035.0,1050.0,1065.0,1080.0,1095.0,1110.0,1125.0,1140.0,1155.0,1170.0,1185.0,1200.0,1215.0,1230.0,1245.0,1260.0,1275.0,1290.0,1305.0,1320.0,1335.0,1350.0,1365.0,1380.0,1395.0,1410.0,1425.0,1440.0,1455.0,1470.0,1485.0,1500.0],"times":[1497355.0,2532607.0,2973259.0,3999977.0,4847630.0,5910592.0,6992871.0,8401972.0,8454836.0,9282569.0,10386902.0,11237281.0,12194644.0,13173378.0,13934970.0,14892418.0,15813456.0,16742823.0,17674523.0,18761841.0,20160912.0,20276679.0,21317052.0,22768184.0,23297371.0,24223044.0,25102843.0,26025991.0,27004325.0,27893793.0,28865295.0,30842147.0,31350963.0,31878862.0,32737433.0,33456211.0,36292709.0,35617012.0,36004551.0,38974762.0,39445617.0,39100953.0,40421340.0,41159200.0,42093079.0,43133307.0,43932902.0,46188931.0,46231839.0,46890959.0,47890467.0,48764895.0,49562734.0,50596839.0,51592454.0,52425648.0,53558468.0,52382247.0,53308441.0,54626614.0,55632084.0,56666728.0,56998910.0,58179803.0,59084488.0,59768116.0,59397687.0,59841885.0,60965990.0,62213128.0,62594465.0,63562816.0,64374438.0,65182431.0,66092089.0,66945377.0,68199134.0,69088319.0,69229451.0,70206450.0,71729036.0,72124572.0,72489186.0,74947165.0,73911022.0,73302124.0,74023839.0,74934410.0,75378198.0,75853956.0,78337860.0,78826608.0,84755631.0,82627395.0,81161224.0,80044854.0,82115934.0,80735112.0,82216436.0,83150740.0]}
```

--------------------------------------------------------------------------------
/benchmarks/arbitrary-transfer-from/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[15.0,30.0,45.0,60.0,75.0,90.0,105.0,120.0,135.0,150.0,165.0,180.0,195.0,210.0,225.0,240.0,255.0,270.0,285.0,300.0,315.0,330.0,345.0,360.0,375.0,390.0,405.0,420.0,435.0,450.0,465.0,480.0,495.0,510.0,525.0,540.0,555.0,570.0,585.0,600.0,615.0,630.0,645.0,660.0,675.0,690.0,705.0,720.0,735.0,750.0,765.0,780.0,795.0,810.0,825.0,840.0,855.0,870.0,885.0,900.0,915.0,930.0,945.0,960.0,975.0,990.0,1005.0,1020.0,1035.0,1050.0,1065.0,1080.0,1095.0,1110.0,1125.0,1140.0,1155.0,1170.0,1185.0,1200.0,1215.0,1230.0,1245.0,1260.0,1275.0,1290.0,1305.0,1320.0,1335.0,1350.0,1365.0,1380.0,1395.0,1410.0,1425.0,1440.0,1455.0,1470.0,1485.0,1500.0],"times":[1497355.0,2532607.0,2973259.0,3999977.0,4847630.0,5910592.0,6992871.0,8401972.0,8454836.0,9282569.0,10386902.0,11237281.0,12194644.0,13173378.0,13934970.0,14892418.0,15813456.0,16742823.0,17674523.0,18761841.0,20160912.0,20276679.0,21317052.0,22768184.0,23297371.0,24223044.0,25102843.0,26025991.0,27004325.0,27893793.0,28865295.0,30842147.0,31350963.0,31878862.0,32737433.0,33456211.0,36292709.0,35617012.0,36004551.0,38974762.0,39445617.0,39100953.0,40421340.0,41159200.0,42093079.0,43133307.0,43932902.0,46188931.0,46231839.0,46890959.0,47890467.0,48764895.0,49562734.0,50596839.0,51592454.0,52425648.0,53558468.0,52382247.0,53308441.0,54626614.0,55632084.0,56666728.0,56998910.0,58179803.0,59084488.0,59768116.0,59397687.0,59841885.0,60965990.0,62213128.0,62594465.0,63562816.0,64374438.0,65182431.0,66092089.0,66945377.0,68199134.0,69088319.0,69229451.0,70206450.0,71729036.0,72124572.0,72489186.0,74947165.0,73911022.0,73302124.0,74023839.0,74934410.0,75378198.0,75853956.0,78337860.0,78826608.0,84755631.0,82627395.0,81161224.0,80044854.0,82115934.0,80735112.0,82216436.0,83150740.0]}
```

--------------------------------------------------------------------------------
/aderyn_core/src/ast/impls/disp/variables.rs:
--------------------------------------------------------------------------------

```rust
 1 | use crate::ast::*;
 2 | use std::fmt::Display;
 3 | 
 4 | impl Display for Mutability {
 5 |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 6 |         f.write_fmt(format_args!("{}", format!("{self:?}").to_lowercase()))
 7 |     }
 8 | }
 9 | 
10 | impl Display for StateMutability {
11 |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12 |         f.write_fmt(format_args!("{}", format!("{self:?}").to_lowercase()))
13 |     }
14 | }
15 | 
16 | impl Display for Visibility {
17 |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
18 |         f.write_fmt(format_args!("{}", format!("{self:?}").to_lowercase()))
19 |     }
20 | }
21 | 
22 | impl Display for StorageLocation {
23 |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
24 |         f.write_fmt(format_args!("{}", format!("{self:?}").to_lowercase()))
25 |     }
26 | }
27 | 
28 | impl Display for VariableDeclaration {
29 |     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
30 |         f.write_fmt(format_args!("{}", self.type_name.as_ref().unwrap()))?;
31 | 
32 |         if self.storage_location != StorageLocation::Default {
33 |             f.write_fmt(format_args!(" {}", self.storage_location))?;
34 |         }
35 | 
36 |         if let Some(mutability) = self.mutability.as_ref()
37 |             && mutability != &Mutability::Mutable
38 |         {
39 |             f.write_fmt(format_args!(" {mutability}"))?;
40 |         }
41 | 
42 |         if let Some(true) = self.indexed {
43 |             f.write_str(" indexed")?;
44 |         }
45 | 
46 |         if self.state_variable {
47 |             f.write_fmt(format_args!(" {}", self.visibility))?;
48 |         }
49 | 
50 |         if !self.name.is_empty() {
51 |             f.write_fmt(format_args!(" {}", self.name))?;
52 |         }
53 | 
54 |         if let Some(value) = self.value.as_ref() {
55 |             f.write_fmt(format_args!(" = {value}"))?;
56 |         }
57 | 
58 |         Ok(())
59 |     }
60 | }
61 | 
```

--------------------------------------------------------------------------------
/benchmarks/large-numeric-literal/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[17.0,34.0,51.0,68.0,85.0,102.0,119.0,136.0,153.0,170.0,187.0,204.0,221.0,238.0,255.0,272.0,289.0,306.0,323.0,340.0,357.0,374.0,391.0,408.0,425.0,442.0,459.0,476.0,493.0,510.0,527.0,544.0,561.0,578.0,595.0,612.0,629.0,646.0,663.0,680.0,697.0,714.0,731.0,748.0,765.0,782.0,799.0,816.0,833.0,850.0,867.0,884.0,901.0,918.0,935.0,952.0,969.0,986.0,1003.0,1020.0,1037.0,1054.0,1071.0,1088.0,1105.0,1122.0,1139.0,1156.0,1173.0,1190.0,1207.0,1224.0,1241.0,1258.0,1275.0,1292.0,1309.0,1326.0,1343.0,1360.0,1377.0,1394.0,1411.0,1428.0,1445.0,1462.0,1479.0,1496.0,1513.0,1530.0,1547.0,1564.0,1581.0,1598.0,1615.0,1632.0,1649.0,1666.0,1683.0,1700.0],"times":[940575.0,2164029.0,3455990.0,4914146.0,5241352.0,6381653.0,7785464.0,7881887.0,12218609.0,9493750.0,10350819.0,11419982.0,12385372.0,13200908.0,14198976.0,14930375.0,16042250.0,16873602.0,17798779.0,18867039.0,19708872.0,20589316.0,21677437.0,22932852.0,23573818.0,24646998.0,25241289.0,26624612.0,27547396.0,28258199.0,29425264.0,33582470.0,33521175.0,33238001.0,34555250.0,35688501.0,35012507.0,35695619.0,36500501.0,38204982.0,39054387.0,50794996.0,51745331.0,42324773.0,43064885.0,44070302.0,44628383.0,45775359.0,48653062.0,47044948.0,47867643.0,49402236.0,60544837.0,54015035.0,52655645.0,53223336.0,53458141.0,54467976.0,55189154.0,56364711.0,57413555.0,63462242.0,64487279.0,65500401.0,66000739.0,62708041.0,62739239.0,63223077.0,64534169.0,65203060.0,66043743.0,67308328.0,67908785.0,69142475.0,69702947.0,70867868.0,72092877.0,73732958.0,77996155.0,81787730.0,83512124.0,82891759.0,79129321.0,79659777.0,79336651.0,80344783.0,81189361.0,81987551.0,83010628.0,84153056.0,84682696.0,85439687.0,86414305.0,87789710.0,88722753.0,89592152.0,90195712.0,91331009.0,92271093.0,93301297.0]}
```

--------------------------------------------------------------------------------
/benchmarks/large-numeric-literal/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[17.0,34.0,51.0,68.0,85.0,102.0,119.0,136.0,153.0,170.0,187.0,204.0,221.0,238.0,255.0,272.0,289.0,306.0,323.0,340.0,357.0,374.0,391.0,408.0,425.0,442.0,459.0,476.0,493.0,510.0,527.0,544.0,561.0,578.0,595.0,612.0,629.0,646.0,663.0,680.0,697.0,714.0,731.0,748.0,765.0,782.0,799.0,816.0,833.0,850.0,867.0,884.0,901.0,918.0,935.0,952.0,969.0,986.0,1003.0,1020.0,1037.0,1054.0,1071.0,1088.0,1105.0,1122.0,1139.0,1156.0,1173.0,1190.0,1207.0,1224.0,1241.0,1258.0,1275.0,1292.0,1309.0,1326.0,1343.0,1360.0,1377.0,1394.0,1411.0,1428.0,1445.0,1462.0,1479.0,1496.0,1513.0,1530.0,1547.0,1564.0,1581.0,1598.0,1615.0,1632.0,1649.0,1666.0,1683.0,1700.0],"times":[940575.0,2164029.0,3455990.0,4914146.0,5241352.0,6381653.0,7785464.0,7881887.0,12218609.0,9493750.0,10350819.0,11419982.0,12385372.0,13200908.0,14198976.0,14930375.0,16042250.0,16873602.0,17798779.0,18867039.0,19708872.0,20589316.0,21677437.0,22932852.0,23573818.0,24646998.0,25241289.0,26624612.0,27547396.0,28258199.0,29425264.0,33582470.0,33521175.0,33238001.0,34555250.0,35688501.0,35012507.0,35695619.0,36500501.0,38204982.0,39054387.0,50794996.0,51745331.0,42324773.0,43064885.0,44070302.0,44628383.0,45775359.0,48653062.0,47044948.0,47867643.0,49402236.0,60544837.0,54015035.0,52655645.0,53223336.0,53458141.0,54467976.0,55189154.0,56364711.0,57413555.0,63462242.0,64487279.0,65500401.0,66000739.0,62708041.0,62739239.0,63223077.0,64534169.0,65203060.0,66043743.0,67308328.0,67908785.0,69142475.0,69702947.0,70867868.0,72092877.0,73732958.0,77996155.0,81787730.0,83512124.0,82891759.0,79129321.0,79659777.0,79336651.0,80344783.0,81189361.0,81987551.0,83010628.0,84153056.0,84682696.0,85439687.0,86414305.0,87789710.0,88722753.0,89592152.0,90195712.0,91331009.0,92271093.0,93301297.0]}
```

--------------------------------------------------------------------------------
/tests/ast/function.json:
--------------------------------------------------------------------------------

```json
1 | {"absolutePath":"a","exportedSymbols":{"C":[6]},"id":7,"nodeType":"SourceUnit","nodes":[{"abstract":false,"baseContracts":[],"canonicalName":"C","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"C","nameLocation":"9:1:1","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"42:68:1","statements":[{"AST":{"nodeType":"YulBlock","src":"61:43:1","statements":[{"body":{"nodeType":"YulBlock","src":"76:22:1","statements":[{"expression":{"arguments":[{"arguments":[{"kind":"number","nodeType":"YulLiteral","src":"92:2:1","type":"","value":"20"}],"functionName":{"name":"blockhash","nodeType":"YulIdentifier","src":"82:9:1"},"nodeType":"YulFunctionCall","src":"82:13:1"}],"functionName":{"name":"pop","nodeType":"YulIdentifier","src":"78:3:1"},"nodeType":"YulFunctionCall","src":"78:18:1"},"nodeType":"YulExpressionStatement","src":"78:18:1"}]},"name":"g","nodeType":"YulFunctionDefinition","src":"63:35:1"},{"expression":{"arguments":[],"functionName":{"name":"g","nodeType":"YulIdentifier","src":"99:1:1"},"nodeType":"YulFunctionCall","src":"99:3:1"},"nodeType":"YulExpressionStatement","src":"99:3:1"}]},"evmVersion":"london","externalReferences":[],"id":3,"nodeType":"InlineAssembly","src":"52:52:1"}]},"functionSelector":"b8c9d365","id":5,"implemented":true,"kind":"function","modifiers":[],"name":"h","nameLocation":"26:1:1","nodeType":"FunctionDefinition","parameters":{"id":1,"nodeType":"ParameterList","parameters":[],"src":"27:2:1"},"returnParameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"42:0:1"},"scope":6,"src":"17:93:1","stateMutability":"view","virtual":false,"visibility":"public"}],"scope":7,"src":"0:112:1","usedErrors":[]}],"src":"0:113:1"}
2 | 
```

--------------------------------------------------------------------------------
/benchmarks/empty-block/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[19.0,38.0,57.0,76.0,95.0,114.0,133.0,152.0,171.0,190.0,209.0,228.0,247.0,266.0,285.0,304.0,323.0,342.0,361.0,380.0,399.0,418.0,437.0,456.0,475.0,494.0,513.0,532.0,551.0,570.0,589.0,608.0,627.0,646.0,665.0,684.0,703.0,722.0,741.0,760.0,779.0,798.0,817.0,836.0,855.0,874.0,893.0,912.0,931.0,950.0,969.0,988.0,1007.0,1026.0,1045.0,1064.0,1083.0,1102.0,1121.0,1140.0,1159.0,1178.0,1197.0,1216.0,1235.0,1254.0,1273.0,1292.0,1311.0,1330.0,1349.0,1368.0,1387.0,1406.0,1425.0,1444.0,1463.0,1482.0,1501.0,1520.0,1539.0,1558.0,1577.0,1596.0,1615.0,1634.0,1653.0,1672.0,1691.0,1710.0,1729.0,1748.0,1767.0,1786.0,1805.0,1824.0,1843.0,1862.0,1881.0,1900.0],"times":[1031170.0,2009053.0,3919582.0,4121913.0,5235126.0,6279340.0,6795543.0,7906720.0,8931617.0,9906779.0,10879156.0,11863284.0,12960902.0,13814366.0,14829343.0,15814156.0,16811069.0,17797324.0,18780899.0,19763411.0,20738865.0,21753449.0,22718942.0,23706022.0,25273780.0,25810434.0,27064897.0,27967527.0,28349815.0,29378933.0,30287926.0,31214709.0,32307851.0,33223958.0,34218516.0,35180635.0,36153233.0,37103229.0,38048998.0,39014346.0,40222362.0,41034517.0,41538584.0,42418883.0,43556510.0,44384993.0,45364285.0,46371083.0,47290924.0,48275221.0,49386513.0,50579653.0,51480538.0,51220511.0,52533739.0,53927491.0,54894027.0,55892735.0,56926650.0,57861325.0,58907785.0,60386379.0,60725491.0,61380744.0,61639036.0,62621958.0,63554701.0,64634605.0,66260160.0,68222697.0,68614318.0,69283997.0,68545097.0,69167902.0,70107979.0,71068115.0,72875134.0,73084079.0,73784672.0,74585978.0,75062912.0,76045287.0,77773425.0,79649824.0,79685592.0,80391665.0,79099591.0,79347530.0,80958381.0,84681355.0,83350516.0,84152224.0,87024763.0,86605396.0,87309952.0,89806999.0,89245972.0,89850549.0,90593530.0,91414567.0]}
```

--------------------------------------------------------------------------------
/benchmarks/empty-block/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[19.0,38.0,57.0,76.0,95.0,114.0,133.0,152.0,171.0,190.0,209.0,228.0,247.0,266.0,285.0,304.0,323.0,342.0,361.0,380.0,399.0,418.0,437.0,456.0,475.0,494.0,513.0,532.0,551.0,570.0,589.0,608.0,627.0,646.0,665.0,684.0,703.0,722.0,741.0,760.0,779.0,798.0,817.0,836.0,855.0,874.0,893.0,912.0,931.0,950.0,969.0,988.0,1007.0,1026.0,1045.0,1064.0,1083.0,1102.0,1121.0,1140.0,1159.0,1178.0,1197.0,1216.0,1235.0,1254.0,1273.0,1292.0,1311.0,1330.0,1349.0,1368.0,1387.0,1406.0,1425.0,1444.0,1463.0,1482.0,1501.0,1520.0,1539.0,1558.0,1577.0,1596.0,1615.0,1634.0,1653.0,1672.0,1691.0,1710.0,1729.0,1748.0,1767.0,1786.0,1805.0,1824.0,1843.0,1862.0,1881.0,1900.0],"times":[1031170.0,2009053.0,3919582.0,4121913.0,5235126.0,6279340.0,6795543.0,7906720.0,8931617.0,9906779.0,10879156.0,11863284.0,12960902.0,13814366.0,14829343.0,15814156.0,16811069.0,17797324.0,18780899.0,19763411.0,20738865.0,21753449.0,22718942.0,23706022.0,25273780.0,25810434.0,27064897.0,27967527.0,28349815.0,29378933.0,30287926.0,31214709.0,32307851.0,33223958.0,34218516.0,35180635.0,36153233.0,37103229.0,38048998.0,39014346.0,40222362.0,41034517.0,41538584.0,42418883.0,43556510.0,44384993.0,45364285.0,46371083.0,47290924.0,48275221.0,49386513.0,50579653.0,51480538.0,51220511.0,52533739.0,53927491.0,54894027.0,55892735.0,56926650.0,57861325.0,58907785.0,60386379.0,60725491.0,61380744.0,61639036.0,62621958.0,63554701.0,64634605.0,66260160.0,68222697.0,68614318.0,69283997.0,68545097.0,69167902.0,70107979.0,71068115.0,72875134.0,73084079.0,73784672.0,74585978.0,75062912.0,76045287.0,77773425.0,79649824.0,79685592.0,80391665.0,79099591.0,79347530.0,80958381.0,84681355.0,83350516.0,84152224.0,87024763.0,86605396.0,87309952.0,89806999.0,89245972.0,89850549.0,90593530.0,91414567.0]}
```

--------------------------------------------------------------------------------
/aderyn_core/src/context/browser/sort_nodes.rs:
--------------------------------------------------------------------------------

```rust
 1 | use std::collections::BTreeSet;
 2 | 
 3 | use crate::context::workspace::{ASTNode, WorkspaceContext};
 4 | 
 5 | pub trait SortNodeReferencesToSequence<'a> {
 6 |     fn sort_by_src_position(self, context: &'a WorkspaceContext) -> Option<Vec<&'a ASTNode>>;
 7 | }
 8 | 
 9 | pub trait SortOwnedNodesToSequence<'a> {
10 |     fn sort_by_src_position(self, context: &'a WorkspaceContext) -> Option<Vec<ASTNode>>;
11 | }
12 | 
13 | impl<'a> SortNodeReferencesToSequence<'a> for &[&'a ASTNode] {
14 |     fn sort_by_src_position(self, context: &'a WorkspaceContext) -> Option<Vec<&'a ASTNode>> {
15 |         sort_by_src_position(self, context)
16 |     }
17 | }
18 | 
19 | impl<'a> SortOwnedNodesToSequence<'a> for &[ASTNode] {
20 |     fn sort_by_src_position(self, context: &'a WorkspaceContext) -> Option<Vec<ASTNode>> {
21 |         let nodes = self.iter().collect::<Vec<_>>();
22 |         let sorted = sort_by_src_position(&nodes, context);
23 |         if let Some(sorted_nodes) = sorted {
24 |             let owned_nodes = sorted_nodes.iter().map(|&x| x.clone()).collect::<Vec<_>>();
25 |             return Some(owned_nodes);
26 |         }
27 |         None
28 |     }
29 | }
30 | 
31 | fn sort_by_src_position<'a>(
32 |     nodes: &[&'a ASTNode],
33 |     context: &'a WorkspaceContext,
34 | ) -> Option<Vec<&'a ASTNode>> {
35 |     if !nodes.iter().all(|x| x.id().is_some()) {
36 |         return None;
37 |     }
38 | 
39 |     // Make sure all these nodes belong to the same file
40 |     let c = nodes
41 |         .iter()
42 |         .map(|x| {
43 |             let key = context.get_node_sort_key_pure(x);
44 |             key.0 // src location
45 |         })
46 |         .collect::<BTreeSet<_>>();
47 | 
48 |     if c.len() != 1 && c.first() != Some(&String::from("")) {
49 |         return None;
50 |     }
51 | 
52 |     // Now sort them
53 |     let mut nodes = nodes.to_vec();
54 |     nodes.sort_by(|a, b| {
55 |         context.get_relative_location_of_nodes(a.id().unwrap(), b.id().unwrap()).unwrap()
56 |     });
57 |     Some(nodes)
58 | }
59 | 
```

--------------------------------------------------------------------------------
/benchmarks/push-zero-opcode/base/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[22.0,44.0,66.0,88.0,110.0,132.0,154.0,176.0,198.0,220.0,242.0,264.0,286.0,308.0,330.0,352.0,374.0,396.0,418.0,440.0,462.0,484.0,506.0,528.0,550.0,572.0,594.0,616.0,638.0,660.0,682.0,704.0,726.0,748.0,770.0,792.0,814.0,836.0,858.0,880.0,902.0,924.0,946.0,968.0,990.0,1012.0,1034.0,1056.0,1078.0,1100.0,1122.0,1144.0,1166.0,1188.0,1210.0,1232.0,1254.0,1276.0,1298.0,1320.0,1342.0,1364.0,1386.0,1408.0,1430.0,1452.0,1474.0,1496.0,1518.0,1540.0,1562.0,1584.0,1606.0,1628.0,1650.0,1672.0,1694.0,1716.0,1738.0,1760.0,1782.0,1804.0,1826.0,1848.0,1870.0,1892.0,1914.0,1936.0,1958.0,1980.0,2002.0,2024.0,2046.0,2068.0,2090.0,2112.0,2134.0,2156.0,2178.0,2200.0],"times":[979155.0,1987356.0,3603583.0,4069243.0,5053819.0,5951042.0,7230336.0,7840143.0,8883413.0,9746688.0,10689429.0,11661921.0,12636944.0,13608399.0,14620355.0,15549749.0,16529521.0,17492984.0,18458172.0,19461900.0,20402386.0,21399074.0,22325972.0,23346305.0,24261719.0,25266102.0,26192361.0,27190220.0,28176355.0,29100688.0,30098811.0,31055947.0,32033401.0,33017737.0,33970982.0,34965507.0,35732215.0,35922761.0,36901516.0,37843414.0,38811799.0,39758463.0,40708562.0,42006198.0,42442163.0,43365044.0,44281659.0,45566210.0,47017660.0,47462589.0,48307570.0,49438327.0,50455006.0,51077692.0,50518326.0,51433248.0,52469158.0,53612796.0,54352744.0,55180398.0,56292334.0,56876377.0,57703063.0,59380373.0,59604387.0,60502738.0,61528103.0,62768384.0,63232698.0,64140915.0,65022625.0,65963425.0,66916069.0,67764099.0,68304235.0,68105383.0,69746341.0,70522497.0,71374398.0,72962438.0,72544684.0,73364572.0,74268877.0,74970295.0,76044443.0,77118469.0,77992263.0,79206533.0,77653761.0,79265633.0,79791498.0,84781356.0,82111102.0,82613101.0,83090625.0,83713853.0,86863676.0,130712084.0,113620507.0,93261247.0]}
```

--------------------------------------------------------------------------------
/benchmarks/push-zero-opcode/new/sample.json:
--------------------------------------------------------------------------------

```json
1 | {"sampling_mode":"Linear","iters":[22.0,44.0,66.0,88.0,110.0,132.0,154.0,176.0,198.0,220.0,242.0,264.0,286.0,308.0,330.0,352.0,374.0,396.0,418.0,440.0,462.0,484.0,506.0,528.0,550.0,572.0,594.0,616.0,638.0,660.0,682.0,704.0,726.0,748.0,770.0,792.0,814.0,836.0,858.0,880.0,902.0,924.0,946.0,968.0,990.0,1012.0,1034.0,1056.0,1078.0,1100.0,1122.0,1144.0,1166.0,1188.0,1210.0,1232.0,1254.0,1276.0,1298.0,1320.0,1342.0,1364.0,1386.0,1408.0,1430.0,1452.0,1474.0,1496.0,1518.0,1540.0,1562.0,1584.0,1606.0,1628.0,1650.0,1672.0,1694.0,1716.0,1738.0,1760.0,1782.0,1804.0,1826.0,1848.0,1870.0,1892.0,1914.0,1936.0,1958.0,1980.0,2002.0,2024.0,2046.0,2068.0,2090.0,2112.0,2134.0,2156.0,2178.0,2200.0],"times":[979155.0,1987356.0,3603583.0,4069243.0,5053819.0,5951042.0,7230336.0,7840143.0,8883413.0,9746688.0,10689429.0,11661921.0,12636944.0,13608399.0,14620355.0,15549749.0,16529521.0,17492984.0,18458172.0,19461900.0,20402386.0,21399074.0,22325972.0,23346305.0,24261719.0,25266102.0,26192361.0,27190220.0,28176355.0,29100688.0,30098811.0,31055947.0,32033401.0,33017737.0,33970982.0,34965507.0,35732215.0,35922761.0,36901516.0,37843414.0,38811799.0,39758463.0,40708562.0,42006198.0,42442163.0,43365044.0,44281659.0,45566210.0,47017660.0,47462589.0,48307570.0,49438327.0,50455006.0,51077692.0,50518326.0,51433248.0,52469158.0,53612796.0,54352744.0,55180398.0,56292334.0,56876377.0,57703063.0,59380373.0,59604387.0,60502738.0,61528103.0,62768384.0,63232698.0,64140915.0,65022625.0,65963425.0,66916069.0,67764099.0,68304235.0,68105383.0,69746341.0,70522497.0,71374398.0,72962438.0,72544684.0,73364572.0,74268877.0,74970295.0,76044443.0,77118469.0,77992263.0,79206533.0,77653761.0,79265633.0,79791498.0,84781356.0,82111102.0,82613101.0,83090625.0,83713853.0,86863676.0,130712084.0,113620507.0,93261247.0]}
```

--------------------------------------------------------------------------------
/tests/ast/yul_hex_literal.json:
--------------------------------------------------------------------------------

```json
1 | {"absolutePath":"a","exportedSymbols":{"Sample":[6]},"id":7,"nodeType":"SourceUnit","nodes":[{"abstract":false,"baseContracts":[],"canonicalName":"Sample","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"id":6,"linearizedBaseContracts":[6],"name":"Sample","nameLocation":"9:6:1","nodeType":"ContractDefinition","nodes":[{"body":{"id":4,"nodeType":"Block","src":"47:167:1","statements":[{"AST":{"nodeType":"YulBlock","src":"66:142:1","statements":[{"nodeType":"YulVariableDeclaration","src":"80:15:1","value":{"hexValue":"74657374","kind":"string","nodeType":"YulLiteral","src":"89:6:1","type":"","value":"test"},"variables":[{"name":"a","nodeType":"YulTypedName","src":"84:1:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"108:54:1","value":{"hexValue":"112233445566778899aabbccddeeff6677889900","kind":"string","nodeType":"YulLiteral","src":"117:45:1","type":""},"variables":[{"name":"b","nodeType":"YulTypedName","src":"112:1:1","type":""}]},{"nodeType":"YulVariableDeclaration","src":"175:23:1","value":{"hexValue":"1234abcd","kind":"string","nodeType":"YulLiteral","src":"184:14:1","type":""},"variables":[{"name":"c","nodeType":"YulTypedName","src":"179:1:1","type":""}]}]},"evmVersion":"loop","externalReferences":[],"id":3,"nodeType":"InlineAssembly","src":"57:151:1"}]},"functionSelector":"26121ff0","id":5,"implemented":true,"kind":"function","modifiers":[],"name":"f","nameLocation":"31:1:1","nodeType":"FunctionDefinition","parameters":{"id":1,"nodeType":"ParameterList","parameters":[],"src":"32:2:1"},"returnParameters":{"id":2,"nodeType":"ParameterList","parameters":[],"src":"47:0:1"},"scope":6,"src":"22:192:1","stateMutability":"pure","virtual":false,"visibility":"public"}],"scope":7,"src":"0:216:1","usedErrors":[]}],"src":"0:217:1"}
2 | 
```
Page 3/103FirstPrevNextLast