#
tokens: 49408/50000 5/1140 files (page 95/103)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 95 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.rs
│   │   │   ├── impls
│   │   │   │   ├── ctx
│   │   │   │   │   ├── 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
│   │   │   └── 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
│   │   │   │   ├── macros.rs
│   │   │   │   ├── parent.rs
│   │   │   │   ├── peek_over.rs
│   │   │   │   ├── peek_under.rs
│   │   │   │   ├── peek.rs
│   │   │   │   ├── siblings.rs
│   │   │   │   ├── sort_nodes.rs
│   │   │   │   └── storage_vars.rs
│   │   │   ├── browser.rs
│   │   │   ├── capturable.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
│   │   │   ├── macros.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
│   │   │   │   ├── 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_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
│   │   ├── visitor
│   │   │   ├── ast_visitor.rs
│   │   │   ├── macros.rs
│   │   │   └── workspace_visitor.rs
│   │   └── visitor.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
│   ├── 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
├── 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
│   ├── 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
├── tools
│   └── xtask
│       ├── Cargo.toml
│       └── src
│           ├── blesspr.rs
│           ├── cut_release.rs
│           ├── flags.rs
│           ├── main.rs
│           ├── reportgen.rs
│           └── tomlgen.rs
└── typos.toml
```

# Files

--------------------------------------------------------------------------------
/benchmarks/ecrecover/report/regression.svg:
--------------------------------------------------------------------------------

```
  1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
  2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
  3 | ecrecover
  4 | </text>
  5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
  6 | Total sample time (ms)
  7 | </text>
  8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
  9 | Iterations (x 10^3)
 10 | </text>
 11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="165" y1="472" x2="165" y2="53"/>
 12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="252" y1="472" x2="252" y2="53"/>
 13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="339" y1="472" x2="339" y2="53"/>
 14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="426" y1="472" x2="426" y2="53"/>
 15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="513" y1="472" x2="513" y2="53"/>
 16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="601" y1="472" x2="601" y2="53"/>
 17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="688" y1="472" x2="688" y2="53"/>
 18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="775" y1="472" x2="775" y2="53"/>
 19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="862" y1="472" x2="862" y2="53"/>
 20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="436" x2="932" y2="436"/>
 21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="397" x2="932" y2="397"/>
 22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="359" x2="932" y2="359"/>
 23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="320" x2="932" y2="320"/>
 24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="281" x2="932" y2="281"/>
 25 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="243" x2="932" y2="243"/>
 26 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="204" x2="932" y2="204"/>
 27 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="166" x2="932" y2="166"/>
 28 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="127" x2="932" y2="127"/>
 29 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="88" x2="932" y2="88"/>
 30 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
 31 | <text x="77" y="436" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 32 | 20.0
 33 | </text>
 34 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,436 86,436 "/>
 35 | <text x="77" y="397" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 36 | 40.0
 37 | </text>
 38 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,397 86,397 "/>
 39 | <text x="77" y="359" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 40 | 60.0
 41 | </text>
 42 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,359 86,359 "/>
 43 | <text x="77" y="320" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 44 | 80.0
 45 | </text>
 46 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,320 86,320 "/>
 47 | <text x="77" y="281" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 48 | 100.0
 49 | </text>
 50 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,281 86,281 "/>
 51 | <text x="77" y="243" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 52 | 120.0
 53 | </text>
 54 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,243 86,243 "/>
 55 | <text x="77" y="204" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 56 | 140.0
 57 | </text>
 58 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,204 86,204 "/>
 59 | <text x="77" y="166" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 60 | 160.0
 61 | </text>
 62 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,166 86,166 "/>
 63 | <text x="77" y="127" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 64 | 180.0
 65 | </text>
 66 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,127 86,127 "/>
 67 | <text x="77" y="88" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 68 | 200.0
 69 | </text>
 70 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,88 86,88 "/>
 71 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
 72 | <text x="165" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 73 | 2
 74 | </text>
 75 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="165,473 165,478 "/>
 76 | <text x="252" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 77 | 4
 78 | </text>
 79 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="252,473 252,478 "/>
 80 | <text x="339" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 81 | 6
 82 | </text>
 83 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="339,473 339,478 "/>
 84 | <text x="426" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 85 | 8
 86 | </text>
 87 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="426,473 426,478 "/>
 88 | <text x="513" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 89 | 10
 90 | </text>
 91 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="513,473 513,478 "/>
 92 | <text x="601" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 93 | 12
 94 | </text>
 95 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="601,473 601,478 "/>
 96 | <text x="688" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 97 | 14
 98 | </text>
 99 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="688,473 688,478 "/>
100 | <text x="775" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
101 | 16
102 | </text>
103 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="775,473 775,478 "/>
104 | <text x="862" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
105 | 18
106 | </text>
107 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="862,473 862,478 "/>
108 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="95" cy="471" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="104" cy="467" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="112" cy="467" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="121" cy="465" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="129" cy="463" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="138" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="146" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="155" cy="458" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="163" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="172" cy="454" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="180" cy="452" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="189" cy="450" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="197" cy="448" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="206" cy="447" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="215" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="223" cy="444" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="232" cy="441" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="240" cy="440" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="249" cy="438" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="257" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="266" cy="434" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="274" cy="432" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="283" cy="430" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="291" cy="428" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="300" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="308" cy="425" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="317" cy="423" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="325" cy="420" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="334" cy="420" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="343" cy="417" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="351" cy="415" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="360" cy="414" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="368" cy="412" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="377" cy="409" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="385" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="394" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="402" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="411" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="419" cy="403" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="428" cy="398" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="436" cy="395" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="445" cy="393" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="454" cy="390" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="462" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="471" cy="378" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="479" cy="377" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="488" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="496" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="505" cy="366" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="513" cy="376" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="522" cy="374" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="530" cy="373" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="539" cy="371" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="547" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="556" cy="366" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="564" cy="363" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="573" cy="359" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="582" cy="357" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="590" cy="355" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="599" cy="357" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="607" cy="353" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="616" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="624" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="633" cy="348" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="641" cy="346" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="650" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="658" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="667" cy="339" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="675" cy="339" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="684" cy="243" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="693" cy="342" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="701" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="710" cy="334" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="718" cy="330" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="727" cy="325" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="735" cy="317" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="744" cy="319" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="752" cy="320" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="761" cy="320" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="769" cy="317" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="778" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="786" cy="316" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="795" cy="314" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="803" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="812" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="821" cy="306" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="829" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="838" cy="302" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="846" cy="305" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="855" cy="296" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="863" cy="282" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="872" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="880" cy="285" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="889" cy="293" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
203 | <circle cx="897" cy="291" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
204 | <circle cx="906" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
205 | <circle cx="914" cy="261" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
206 | <circle cx="923" cy="270" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
207 | <circle cx="932" cy="281" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
208 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,271 "/>
209 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,280 932,255 "/>
210 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
211 | Sample
212 | </text>
213 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
214 | Linear regression
215 | </text>
216 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
217 | Confidence interval
218 | </text>
219 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
220 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
221 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
222 | </svg>
223 | 
```

--------------------------------------------------------------------------------
/benchmarks/deprecated-oz-functions/report/regression.svg:
--------------------------------------------------------------------------------

```
  1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
  2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
  3 | deprecated-oz-functions
  4 | </text>
  5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
  6 | Total sample time (ms)
  7 | </text>
  8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
  9 | Iterations
 10 | </text>
 11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="185" y1="472" x2="185" y2="53"/>
 12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="291" y1="472" x2="291" y2="53"/>
 13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="398" y1="472" x2="398" y2="53"/>
 14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="505" y1="472" x2="505" y2="53"/>
 15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="611" y1="472" x2="611" y2="53"/>
 16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="718" y1="472" x2="718" y2="53"/>
 17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="825" y1="472" x2="825" y2="53"/>
 18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="932" y1="472" x2="932" y2="53"/>
 19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="440" x2="932" y2="440"/>
 20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="404" x2="932" y2="404"/>
 21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="367" x2="932" y2="367"/>
 22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="331" x2="932" y2="331"/>
 23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="295" x2="932" y2="295"/>
 24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="259" x2="932" y2="259"/>
 25 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="223" x2="932" y2="223"/>
 26 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="186" x2="932" y2="186"/>
 27 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="150" x2="932" y2="150"/>
 28 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="114" x2="932" y2="114"/>
 29 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="78" x2="932" y2="78"/>
 30 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
 31 | <text x="77" y="440" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 32 | 10.0
 33 | </text>
 34 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,440 86,440 "/>
 35 | <text x="77" y="404" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 36 | 20.0
 37 | </text>
 38 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,404 86,404 "/>
 39 | <text x="77" y="367" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 40 | 30.0
 41 | </text>
 42 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,367 86,367 "/>
 43 | <text x="77" y="331" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 44 | 40.0
 45 | </text>
 46 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,331 86,331 "/>
 47 | <text x="77" y="295" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 48 | 50.0
 49 | </text>
 50 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,295 86,295 "/>
 51 | <text x="77" y="259" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 52 | 60.0
 53 | </text>
 54 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,259 86,259 "/>
 55 | <text x="77" y="223" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 56 | 70.0
 57 | </text>
 58 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,223 86,223 "/>
 59 | <text x="77" y="186" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 60 | 80.0
 61 | </text>
 62 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,186 86,186 "/>
 63 | <text x="77" y="150" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 64 | 90.0
 65 | </text>
 66 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,150 86,150 "/>
 67 | <text x="77" y="114" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 68 | 100.0
 69 | </text>
 70 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,114 86,114 "/>
 71 | <text x="77" y="78" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 72 | 110.0
 73 | </text>
 74 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,78 86,78 "/>
 75 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
 76 | <text x="185" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 77 | 50
 78 | </text>
 79 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="185,473 185,478 "/>
 80 | <text x="291" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 81 | 100
 82 | </text>
 83 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="291,473 291,478 "/>
 84 | <text x="398" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 85 | 150
 86 | </text>
 87 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="398,473 398,478 "/>
 88 | <text x="505" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 89 | 200
 90 | </text>
 91 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="505,473 505,478 "/>
 92 | <text x="611" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 93 | 250
 94 | </text>
 95 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="611,473 611,478 "/>
 96 | <text x="718" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 97 | 300
 98 | </text>
 99 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="718,473 718,478 "/>
100 | <text x="825" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
101 | 350
102 | </text>
103 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="825,473 825,478 "/>
104 | <text x="932" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
105 | 400
106 | </text>
107 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="932,473 932,478 "/>
108 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
109 | <circle cx="95" cy="468" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
110 | <circle cx="104" cy="463" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
111 | <circle cx="112" cy="461" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
112 | <circle cx="121" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
113 | <circle cx="129" cy="453" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="138" cy="449" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="146" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="155" cy="443" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="163" cy="438" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="172" cy="433" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="180" cy="431" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="189" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="197" cy="422" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="206" cy="419" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="215" cy="415" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="223" cy="411" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="232" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="240" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="249" cy="403" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="257" cy="397" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="266" cy="382" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="274" cy="388" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="283" cy="384" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="291" cy="380" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="300" cy="375" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="308" cy="364" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="317" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="325" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="334" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="343" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="351" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="360" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="368" cy="332" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="377" cy="335" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="385" cy="338" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="394" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="402" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="411" cy="323" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="419" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="428" cy="327" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="436" cy="321" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="445" cy="312" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="454" cy="313" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="462" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="471" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="479" cy="301" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="488" cy="293" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="496" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="505" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="513" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="522" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="530" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="539" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="547" cy="271" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="556" cy="269" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="564" cy="267" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="573" cy="253" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="582" cy="257" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="590" cy="252" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="599" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="607" cy="246" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="616" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="624" cy="138" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="633" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="641" cy="224" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="650" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="658" cy="204" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="667" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="675" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="684" cy="215" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="693" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="701" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="710" cy="201" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="718" cy="196" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="727" cy="191" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="735" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="744" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="752" cy="184" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="761" cy="183" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="769" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="778" cy="172" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="786" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="795" cy="165" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="803" cy="159" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="812" cy="173" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="821" cy="163" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="829" cy="156" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="838" cy="158" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="846" cy="147" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="855" cy="147" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="863" cy="140" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="872" cy="144" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="880" cy="135" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="889" cy="131" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
203 | <circle cx="897" cy="92" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
204 | <circle cx="906" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
205 | <circle cx="914" cy="117" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
206 | <circle cx="923" cy="119" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
207 | <circle cx="932" cy="111" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
208 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,93 "/>
209 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,101 932,81 "/>
210 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
211 | Sample
212 | </text>
213 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
214 | Linear regression
215 | </text>
216 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
217 | Confidence interval
218 | </text>
219 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
220 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
221 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
222 | </svg>
223 | 
```

--------------------------------------------------------------------------------
/benchmarks/inconsistent-type-names/report/regression.svg:
--------------------------------------------------------------------------------

```
  1 | <svg width="960" height="540" viewBox="0 0 960 540" xmlns="http://www.w3.org/2000/svg">
  2 | <text x="480" y="32" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="16.129032258064516" opacity="1" fill="#000000">
  3 | inconsistent-type-names
  4 | </text>
  5 | <text x="27" y="263" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000" transform="rotate(270, 27, 263)">
  6 | Total sample time (ms)
  7 | </text>
  8 | <text x="510" y="513" dy="-0.5ex" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
  9 | Iterations
 10 | </text>
 11 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="163" y1="472" x2="163" y2="53"/>
 12 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="249" y1="472" x2="249" y2="53"/>
 13 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="334" y1="472" x2="334" y2="53"/>
 14 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="419" y1="472" x2="419" y2="53"/>
 15 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="505" y1="472" x2="505" y2="53"/>
 16 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="590" y1="472" x2="590" y2="53"/>
 17 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="675" y1="472" x2="675" y2="53"/>
 18 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="761" y1="472" x2="761" y2="53"/>
 19 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="846" y1="472" x2="846" y2="53"/>
 20 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="932" y1="472" x2="932" y2="53"/>
 21 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="435" x2="932" y2="435"/>
 22 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="394" x2="932" y2="394"/>
 23 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="353" x2="932" y2="353"/>
 24 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="313" x2="932" y2="313"/>
 25 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="272" x2="932" y2="272"/>
 26 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="232" x2="932" y2="232"/>
 27 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="191" x2="932" y2="191"/>
 28 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="150" x2="932" y2="150"/>
 29 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="110" x2="932" y2="110"/>
 30 | <line opacity="0.2" stroke="#000000" stroke-width="1" x1="87" y1="69" x2="932" y2="69"/>
 31 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="86,53 86,472 "/>
 32 | <text x="77" y="435" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 33 | 20.0
 34 | </text>
 35 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,435 86,435 "/>
 36 | <text x="77" y="394" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 37 | 40.0
 38 | </text>
 39 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,394 86,394 "/>
 40 | <text x="77" y="353" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 41 | 60.0
 42 | </text>
 43 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,353 86,353 "/>
 44 | <text x="77" y="313" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 45 | 80.0
 46 | </text>
 47 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,313 86,313 "/>
 48 | <text x="77" y="272" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 49 | 100.0
 50 | </text>
 51 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,272 86,272 "/>
 52 | <text x="77" y="232" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 53 | 120.0
 54 | </text>
 55 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,232 86,232 "/>
 56 | <text x="77" y="191" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 57 | 140.0
 58 | </text>
 59 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,191 86,191 "/>
 60 | <text x="77" y="150" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 61 | 160.0
 62 | </text>
 63 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,150 86,150 "/>
 64 | <text x="77" y="110" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 65 | 180.0
 66 | </text>
 67 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,110 86,110 "/>
 68 | <text x="77" y="69" dy="0.5ex" text-anchor="end" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 69 | 200.0
 70 | </text>
 71 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="81,69 86,69 "/>
 72 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="87,473 932,473 "/>
 73 | <text x="163" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 74 | 10
 75 | </text>
 76 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="163,473 163,478 "/>
 77 | <text x="249" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 78 | 20
 79 | </text>
 80 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="249,473 249,478 "/>
 81 | <text x="334" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 82 | 30
 83 | </text>
 84 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="334,473 334,478 "/>
 85 | <text x="419" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 86 | 40
 87 | </text>
 88 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="419,473 419,478 "/>
 89 | <text x="505" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 90 | 50
 91 | </text>
 92 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="505,473 505,478 "/>
 93 | <text x="590" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 94 | 60
 95 | </text>
 96 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="590,473 590,478 "/>
 97 | <text x="675" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
 98 | 70
 99 | </text>
100 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="675,473 675,478 "/>
101 | <text x="761" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
102 | 80
103 | </text>
104 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="761,473 761,478 "/>
105 | <text x="846" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
106 | 90
107 | </text>
108 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="846,473 846,478 "/>
109 | <text x="932" y="483" dy="0.76em" text-anchor="middle" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
110 | 100
111 | </text>
112 | <polyline fill="none" opacity="1" stroke="#000000" stroke-width="1" points="932,473 932,478 "/>
113 | <circle cx="87" cy="472" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
114 | <circle cx="95" cy="468" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
115 | <circle cx="104" cy="466" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
116 | <circle cx="112" cy="462" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
117 | <circle cx="121" cy="460" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
118 | <circle cx="129" cy="457" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
119 | <circle cx="138" cy="456" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
120 | <circle cx="146" cy="451" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
121 | <circle cx="155" cy="449" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
122 | <circle cx="163" cy="447" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
123 | <circle cx="172" cy="445" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
124 | <circle cx="180" cy="442" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
125 | <circle cx="189" cy="439" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
126 | <circle cx="197" cy="436" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
127 | <circle cx="206" cy="433" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
128 | <circle cx="215" cy="429" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
129 | <circle cx="223" cy="425" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
130 | <circle cx="232" cy="426" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
131 | <circle cx="240" cy="370" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
132 | <circle cx="249" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
133 | <circle cx="257" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
134 | <circle cx="266" cy="404" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
135 | <circle cx="274" cy="407" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
136 | <circle cx="283" cy="387" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
137 | <circle cx="291" cy="408" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
138 | <circle cx="300" cy="405" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
139 | <circle cx="308" cy="398" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
140 | <circle cx="317" cy="400" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
141 | <circle cx="325" cy="396" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
142 | <circle cx="334" cy="391" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
143 | <circle cx="343" cy="383" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
144 | <circle cx="351" cy="368" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
145 | <circle cx="360" cy="304" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
146 | <circle cx="368" cy="309" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
147 | <circle cx="377" cy="118" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
148 | <circle cx="385" cy="335" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
149 | <circle cx="394" cy="344" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
150 | <circle cx="402" cy="324" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
151 | <circle cx="411" cy="298" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
152 | <circle cx="419" cy="351" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
153 | <circle cx="428" cy="327" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
154 | <circle cx="436" cy="349" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
155 | <circle cx="445" cy="277" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
156 | <circle cx="454" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
157 | <circle cx="462" cy="319" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
158 | <circle cx="471" cy="326" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
159 | <circle cx="479" cy="329" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
160 | <circle cx="488" cy="328" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
161 | <circle cx="496" cy="325" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
162 | <circle cx="505" cy="334" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
163 | <circle cx="513" cy="331" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
164 | <circle cx="522" cy="326" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
165 | <circle cx="530" cy="212" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
166 | <circle cx="539" cy="264" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
167 | <circle cx="547" cy="288" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
168 | <circle cx="556" cy="293" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
169 | <circle cx="564" cy="284" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
170 | <circle cx="573" cy="275" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
171 | <circle cx="582" cy="286" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
172 | <circle cx="590" cy="273" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
173 | <circle cx="599" cy="279" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
174 | <circle cx="607" cy="53" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
175 | <circle cx="616" cy="233" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
176 | <circle cx="624" cy="223" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
177 | <circle cx="633" cy="203" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
178 | <circle cx="641" cy="274" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
179 | <circle cx="650" cy="273" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
180 | <circle cx="658" cy="264" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
181 | <circle cx="667" cy="240" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
182 | <circle cx="675" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
183 | <circle cx="684" cy="205" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
184 | <circle cx="693" cy="218" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
185 | <circle cx="701" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
186 | <circle cx="710" cy="245" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
187 | <circle cx="718" cy="235" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
188 | <circle cx="727" cy="238" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
189 | <circle cx="735" cy="236" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
190 | <circle cx="744" cy="231" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
191 | <circle cx="752" cy="228" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
192 | <circle cx="761" cy="185" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
193 | <circle cx="769" cy="221" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
194 | <circle cx="778" cy="213" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
195 | <circle cx="786" cy="225" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
196 | <circle cx="795" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
197 | <circle cx="803" cy="166" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
198 | <circle cx="812" cy="217" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
199 | <circle cx="821" cy="210" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
200 | <circle cx="829" cy="213" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
201 | <circle cx="838" cy="179" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
202 | <circle cx="846" cy="186" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
203 | <circle cx="855" cy="129" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
204 | <circle cx="863" cy="116" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
205 | <circle cx="872" cy="197" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
206 | <circle cx="880" cy="211" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
207 | <circle cx="889" cy="189" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
208 | <circle cx="897" cy="142" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
209 | <circle cx="906" cy="130" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
210 | <circle cx="914" cy="182" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
211 | <circle cx="923" cy="192" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
212 | <circle cx="932" cy="190" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
213 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="1" points="87,473 932,138 "/>
214 | <polygon opacity="0.25" fill="#1F78B4" points="87,473 932,151 932,124 "/>
215 | <text x="132" y="68" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
216 | Sample
217 | </text>
218 | <text x="132" y="83" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
219 | Linear regression
220 | </text>
221 | <text x="132" y="98" dy="0.76em" text-anchor="start" font-family="sans-serif" font-size="9.67741935483871" opacity="1" fill="#000000">
222 | Confidence interval
223 | </text>
224 | <circle cx="112" cy="73" r="3" opacity="1" fill="#1F78B4" stroke="none" stroke-width="1"/>
225 | <polyline fill="none" opacity="1" stroke="#1F78B4" stroke-width="2" points="102,88 122,88 "/>
226 | <rect x="102" y="98" width="20" height="10" opacity="0.25" fill="#1F78B4" stroke="none"/>
227 | </svg>
228 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/visitor/ast_visitor.rs:
--------------------------------------------------------------------------------

```rust
  1 | use eyre::Result;
  2 | 
  3 | use crate::ast::*;
  4 | 
  5 | pub trait ASTConstVisitor {
  6 |     fn visit_array_type_name(&mut self, node: &ArrayTypeName) -> Result<bool> {
  7 |         self.visit_node(node)
  8 |     }
  9 |     fn end_visit_array_type_name(&mut self, node: &ArrayTypeName) -> Result<()> {
 10 |         self.end_visit_node(node)
 11 |     }
 12 | 
 13 |     fn visit_assignment(&mut self, node: &Assignment) -> Result<bool> {
 14 |         self.visit_node(node)
 15 |     }
 16 |     fn end_visit_assignment(&mut self, node: &Assignment) -> Result<()> {
 17 |         self.end_visit_node(node)
 18 |     }
 19 | 
 20 |     fn visit_binary_operation(&mut self, node: &BinaryOperation) -> Result<bool> {
 21 |         self.visit_node(node)
 22 |     }
 23 |     fn end_visit_binary_operation(&mut self, node: &BinaryOperation) -> Result<()> {
 24 |         self.end_visit_node(node)
 25 |     }
 26 | 
 27 |     fn visit_block(&mut self, node: &Block) -> Result<bool> {
 28 |         self.visit_node(node)
 29 |     }
 30 |     fn end_visit_block(&mut self, node: &Block) -> Result<()> {
 31 |         self.end_visit_node(node)
 32 |     }
 33 | 
 34 |     fn visit_unchecked_block(&mut self, node: &UncheckedBlock) -> Result<bool> {
 35 |         self.visit_node(node)
 36 |     }
 37 |     fn end_visit_unchecked_block(&mut self, node: &UncheckedBlock) -> Result<()> {
 38 |         self.end_visit_node(node)
 39 |     }
 40 | 
 41 |     fn visit_conditional(&mut self, node: &Conditional) -> Result<bool> {
 42 |         self.visit_node(node)
 43 |     }
 44 |     fn end_visit_conditional(&mut self, node: &Conditional) -> Result<()> {
 45 |         self.end_visit_node(node)
 46 |     }
 47 | 
 48 |     fn visit_contract_definition(&mut self, node: &ContractDefinition) -> Result<bool> {
 49 |         self.visit_node(node)
 50 |     }
 51 |     fn end_visit_contract_definition(&mut self, node: &ContractDefinition) -> Result<()> {
 52 |         self.end_visit_node(node)
 53 |     }
 54 | 
 55 |     fn visit_elementary_type_name(&mut self, node: &ElementaryTypeName) -> Result<bool> {
 56 |         self.visit_node(node)
 57 |     }
 58 |     fn end_visit_elementary_type_name(&mut self, node: &ElementaryTypeName) -> Result<()> {
 59 |         self.end_visit_node(node)
 60 |     }
 61 | 
 62 |     fn visit_elementary_type_name_expression(
 63 |         &mut self,
 64 |         node: &ElementaryTypeNameExpression,
 65 |     ) -> Result<bool> {
 66 |         self.visit_node(node)
 67 |     }
 68 |     fn end_visit_elementary_type_name_expression(
 69 |         &mut self,
 70 |         node: &ElementaryTypeNameExpression,
 71 |     ) -> Result<()> {
 72 |         self.end_visit_node(node)
 73 |     }
 74 | 
 75 |     fn visit_emit_statement(&mut self, node: &EmitStatement) -> Result<bool> {
 76 |         self.visit_node(node)
 77 |     }
 78 |     fn end_visit_emit_statement(&mut self, node: &EmitStatement) -> Result<()> {
 79 |         self.end_visit_node(node)
 80 |     }
 81 | 
 82 |     fn visit_enum_definition(&mut self, node: &EnumDefinition) -> Result<bool> {
 83 |         self.visit_node(node)
 84 |     }
 85 |     fn end_visit_enum_definition(&mut self, node: &EnumDefinition) -> Result<()> {
 86 |         self.end_visit_node(node)
 87 |     }
 88 | 
 89 |     fn visit_enum_value(&mut self, node: &EnumValue) -> Result<bool> {
 90 |         self.visit_node(node)
 91 |     }
 92 |     fn end_visit_enum_value(&mut self, node: &EnumValue) -> Result<()> {
 93 |         self.end_visit_node(node)
 94 |     }
 95 | 
 96 |     fn visit_event_definition(&mut self, node: &EventDefinition) -> Result<bool> {
 97 |         self.visit_node(node)
 98 |     }
 99 |     fn end_visit_event_definition(&mut self, node: &EventDefinition) -> Result<()> {
100 |         self.end_visit_node(node)
101 |     }
102 | 
103 |     fn visit_error_definition(&mut self, node: &ErrorDefinition) -> Result<bool> {
104 |         self.visit_node(node)
105 |     }
106 |     fn end_visit_error_definition(&mut self, node: &ErrorDefinition) -> Result<()> {
107 |         self.end_visit_node(node)
108 |     }
109 | 
110 |     fn visit_expression_statement(&mut self, node: &ExpressionStatement) -> Result<bool> {
111 |         self.visit_node(node)
112 |     }
113 |     fn end_visit_expression_statement(&mut self, node: &ExpressionStatement) -> Result<()> {
114 |         self.end_visit_node(node)
115 |     }
116 | 
117 |     fn visit_function_call(&mut self, node: &FunctionCall) -> Result<bool> {
118 |         self.visit_node(node)
119 |     }
120 |     fn end_visit_function_call(&mut self, node: &FunctionCall) -> Result<()> {
121 |         self.end_visit_node(node)
122 |     }
123 | 
124 |     fn visit_function_call_options(&mut self, node: &FunctionCallOptions) -> Result<bool> {
125 |         self.visit_node(node)
126 |     }
127 |     fn end_visit_function_call_options(&mut self, node: &FunctionCallOptions) -> Result<()> {
128 |         self.end_visit_node(node)
129 |     }
130 | 
131 |     fn visit_function_definition(&mut self, node: &FunctionDefinition) -> Result<bool> {
132 |         self.visit_node(node)
133 |     }
134 |     fn end_visit_function_definition(&mut self, node: &FunctionDefinition) -> Result<()> {
135 |         self.end_visit_node(node)
136 |     }
137 | 
138 |     fn visit_function_type_name(&mut self, node: &FunctionTypeName) -> Result<bool> {
139 |         self.visit_node(node)
140 |     }
141 |     fn end_visit_function_type_name(&mut self, node: &FunctionTypeName) -> Result<()> {
142 |         self.end_visit_node(node)
143 |     }
144 | 
145 |     fn visit_for_statement(&mut self, node: &ForStatement) -> Result<bool> {
146 |         self.visit_node(node)
147 |     }
148 |     fn end_visit_for_statement(&mut self, node: &ForStatement) -> Result<()> {
149 |         self.end_visit_node(node)
150 |     }
151 | 
152 |     fn visit_identifier(&mut self, node: &Identifier) -> Result<bool> {
153 |         self.visit_node(node)
154 |     }
155 |     fn end_visit_identifier(&mut self, node: &Identifier) -> Result<()> {
156 |         self.end_visit_node(node)
157 |     }
158 | 
159 |     fn visit_identifier_path(&mut self, node: &IdentifierPath) -> Result<bool> {
160 |         self.visit_node(node)
161 |     }
162 |     fn end_visit_identifier_path(&mut self, node: &IdentifierPath) -> Result<()> {
163 |         self.end_visit_node(node)
164 |     }
165 | 
166 |     fn visit_if_statement(&mut self, node: &IfStatement) -> Result<bool> {
167 |         self.visit_node(node)
168 |     }
169 |     fn end_visit_if_statement(&mut self, node: &IfStatement) -> Result<()> {
170 |         self.end_visit_node(node)
171 |     }
172 | 
173 |     fn visit_import_directive(&mut self, node: &ImportDirective) -> Result<bool> {
174 |         self.visit_node(node)
175 |     }
176 |     fn end_visit_import_directive(&mut self, node: &ImportDirective) -> Result<()> {
177 |         self.end_visit_node(node)
178 |     }
179 | 
180 |     fn visit_index_access(&mut self, node: &IndexAccess) -> Result<bool> {
181 |         self.visit_node(node)
182 |     }
183 |     fn end_visit_index_access(&mut self, node: &IndexAccess) -> Result<()> {
184 |         self.end_visit_node(node)
185 |     }
186 | 
187 |     fn visit_index_range_access(&mut self, node: &IndexRangeAccess) -> Result<bool> {
188 |         self.visit_node(node)
189 |     }
190 |     fn end_visit_index_range_access(&mut self, node: &IndexRangeAccess) -> Result<()> {
191 |         self.end_visit_node(node)
192 |     }
193 | 
194 |     fn visit_inheritance_specifier(&mut self, node: &InheritanceSpecifier) -> Result<bool> {
195 |         self.visit_node(node)
196 |     }
197 |     fn end_visit_inheritance_specifier(&mut self, node: &InheritanceSpecifier) -> Result<()> {
198 |         self.end_visit_node(node)
199 |     }
200 | 
201 |     fn visit_inline_assembly(&mut self, node: &InlineAssembly) -> Result<bool> {
202 |         self.visit_node(node)
203 |     }
204 |     fn end_visit_inline_assembly(&mut self, node: &InlineAssembly) -> Result<()> {
205 |         self.end_visit_node(node)
206 |     }
207 | 
208 |     fn visit_literal(&mut self, node: &Literal) -> Result<bool> {
209 |         self.visit_node(node)
210 |     }
211 |     fn end_visit_literal(&mut self, node: &Literal) -> Result<()> {
212 |         self.end_visit_node(node)
213 |     }
214 | 
215 |     fn visit_member_access(&mut self, node: &MemberAccess) -> Result<bool> {
216 |         self.visit_node(node)
217 |     }
218 |     fn end_visit_member_access(&mut self, node: &MemberAccess) -> Result<()> {
219 |         self.end_visit_node(node)
220 |     }
221 | 
222 |     fn visit_new_expression(&mut self, node: &NewExpression) -> Result<bool> {
223 |         self.visit_node(node)
224 |     }
225 |     fn end_visit_new_expression(&mut self, node: &NewExpression) -> Result<()> {
226 |         self.end_visit_node(node)
227 |     }
228 | 
229 |     fn visit_mapping(&mut self, node: &Mapping) -> Result<bool> {
230 |         self.visit_node(node)
231 |     }
232 |     fn end_visit_mapping(&mut self, node: &Mapping) -> Result<()> {
233 |         self.end_visit_node(node)
234 |     }
235 | 
236 |     fn visit_modifier_definition(&mut self, node: &ModifierDefinition) -> Result<bool> {
237 |         self.visit_node(node)
238 |     }
239 |     fn end_visit_modifier_definition(&mut self, node: &ModifierDefinition) -> Result<()> {
240 |         self.end_visit_node(node)
241 |     }
242 | 
243 |     fn visit_modifier_invocation(&mut self, node: &ModifierInvocation) -> Result<bool> {
244 |         self.visit_node(node)
245 |     }
246 |     fn end_visit_modifier_invocation(&mut self, node: &ModifierInvocation) -> Result<()> {
247 |         self.end_visit_node(node)
248 |     }
249 | 
250 |     fn visit_override_specifier(&mut self, node: &OverrideSpecifier) -> Result<bool> {
251 |         self.visit_node(node)
252 |     }
253 |     fn end_visit_override_specifier(&mut self, node: &OverrideSpecifier) -> Result<()> {
254 |         self.end_visit_node(node)
255 |     }
256 | 
257 |     fn visit_parameter_list(&mut self, node: &ParameterList) -> Result<bool> {
258 |         self.visit_node(node)
259 |     }
260 |     fn end_visit_parameter_list(&mut self, node: &ParameterList) -> Result<()> {
261 |         self.end_visit_node(node)
262 |     }
263 | 
264 |     fn visit_pragma_directive(&mut self, node: &PragmaDirective) -> Result<bool> {
265 |         self.visit_node(node)
266 |     }
267 |     fn end_visit_pragma_directive(&mut self, node: &PragmaDirective) -> Result<()> {
268 |         self.end_visit_node(node)
269 |     }
270 | 
271 |     fn visit_return(&mut self, node: &Return) -> Result<bool> {
272 |         self.visit_node(node)
273 |     }
274 |     fn end_visit_return(&mut self, node: &Return) -> Result<()> {
275 |         self.end_visit_node(node)
276 |     }
277 | 
278 |     fn visit_revert_statement(&mut self, node: &RevertStatement) -> Result<bool> {
279 |         self.visit_node(node)
280 |     }
281 |     fn end_visit_revert_statement(&mut self, node: &RevertStatement) -> Result<()> {
282 |         self.end_visit_node(node)
283 |     }
284 | 
285 |     fn visit_source_unit(&mut self, node: &SourceUnit) -> Result<bool> {
286 |         self.visit_node(node)
287 |     }
288 |     fn end_visit_source_unit(&mut self, node: &SourceUnit) -> Result<()> {
289 |         self.end_visit_node(node)
290 |     }
291 | 
292 |     fn visit_struct_definition(&mut self, node: &StructDefinition) -> Result<bool> {
293 |         self.visit_node(node)
294 |     }
295 |     fn end_visit_struct_definition(&mut self, node: &StructDefinition) -> Result<()> {
296 |         self.end_visit_node(node)
297 |     }
298 | 
299 |     fn visit_structured_documentation(&mut self, node: &StructuredDocumentation) -> Result<bool> {
300 |         self.visit_node(node)
301 |     }
302 |     fn end_visit_structured_documentation(&mut self, node: &StructuredDocumentation) -> Result<()> {
303 |         self.end_visit_node(node)
304 |     }
305 | 
306 |     fn visit_try_statement(&mut self, node: &TryStatement) -> Result<bool> {
307 |         self.visit_node(node)
308 |     }
309 |     fn end_visit_try_statement(&mut self, node: &TryStatement) -> Result<()> {
310 |         self.end_visit_node(node)
311 |     }
312 | 
313 |     fn visit_try_catch_clause(&mut self, node: &TryCatchClause) -> Result<bool> {
314 |         self.visit_node(node)
315 |     }
316 |     fn end_visit_try_catch_clause(&mut self, node: &TryCatchClause) -> Result<()> {
317 |         self.end_visit_node(node)
318 |     }
319 | 
320 |     fn visit_tuple_expression(&mut self, node: &TupleExpression) -> Result<bool> {
321 |         self.visit_node(node)
322 |     }
323 |     fn end_visit_tuple_expression(&mut self, node: &TupleExpression) -> Result<()> {
324 |         self.end_visit_node(node)
325 |     }
326 | 
327 |     fn visit_unary_operation(&mut self, node: &UnaryOperation) -> Result<bool> {
328 |         self.visit_node(node)
329 |     }
330 |     fn end_visit_unary_operation(&mut self, node: &UnaryOperation) -> Result<()> {
331 |         self.end_visit_node(node)
332 |     }
333 | 
334 |     fn visit_user_defined_type_name(&mut self, node: &UserDefinedTypeName) -> Result<bool> {
335 |         self.visit_node(node)
336 |     }
337 |     fn end_visit_user_defined_type_name(&mut self, node: &UserDefinedTypeName) -> Result<()> {
338 |         self.end_visit_node(node)
339 |     }
340 | 
341 |     fn visit_user_defined_value_type_definition(
342 |         &mut self,
343 |         node: &UserDefinedValueTypeDefinition,
344 |     ) -> Result<bool> {
345 |         self.visit_node(node)
346 |     }
347 |     fn end_visit_user_defined_value_type_definition(
348 |         &mut self,
349 |         node: &UserDefinedValueTypeDefinition,
350 |     ) -> Result<()> {
351 |         self.end_visit_node(node)
352 |     }
353 | 
354 |     fn visit_using_for_directive(&mut self, node: &UsingForDirective) -> Result<bool> {
355 |         self.visit_node(node)
356 |     }
357 |     fn end_visit_using_for_directive(&mut self, node: &UsingForDirective) -> Result<()> {
358 |         self.end_visit_node(node)
359 |     }
360 | 
361 |     fn visit_variable_declaration(&mut self, node: &VariableDeclaration) -> Result<bool> {
362 |         self.visit_node(node)
363 |     }
364 |     fn end_visit_variable_declaration(&mut self, node: &VariableDeclaration) -> Result<()> {
365 |         self.end_visit_node(node)
366 |     }
367 | 
368 |     fn visit_variable_declaration_statement(
369 |         &mut self,
370 |         node: &VariableDeclarationStatement,
371 |     ) -> Result<bool> {
372 |         self.visit_node(node)
373 |     }
374 |     fn end_visit_variable_declaration_statement(
375 |         &mut self,
376 |         node: &VariableDeclarationStatement,
377 |     ) -> Result<()> {
378 |         self.end_visit_node(node)
379 |     }
380 | 
381 |     fn visit_while_statement(&mut self, node: &WhileStatement) -> Result<bool> {
382 |         self.visit_node(node)
383 |     }
384 |     fn end_visit_while_statement(&mut self, node: &WhileStatement) -> Result<()> {
385 |         self.end_visit_node(node)
386 |     }
387 | 
388 |     fn visit_do_while_statement(&mut self, node: &DoWhileStatement) -> Result<bool> {
389 |         self.visit_node(node)
390 |     }
391 |     fn end_do_visit_while_statement(&mut self, node: &DoWhileStatement) -> Result<()> {
392 |         self.end_visit_node(node)
393 |     }
394 | 
395 |     fn visit_continue_statement(&mut self, node: &Continue) -> Result<bool> {
396 |         self.visit_node(node)
397 |     }
398 |     fn end_visit_continue_statement(&mut self, node: &Continue) -> Result<()> {
399 |         self.end_visit_node(node)
400 |     }
401 | 
402 |     fn visit_placeholder_statement(&mut self, node: &PlaceholderStatement) -> Result<bool> {
403 |         self.visit_node(node)
404 |     }
405 |     fn end_visit_placeholder_statement(&mut self, node: &PlaceholderStatement) -> Result<()> {
406 |         self.end_visit_node(node)
407 |     }
408 | 
409 |     fn visit_break_statement(&mut self, node: &Break) -> Result<bool> {
410 |         self.visit_node(node)
411 |     }
412 |     fn end_visit_break_statement(&mut self, node: &Break) -> Result<()> {
413 |         self.end_visit_node(node)
414 |     }
415 | 
416 |     fn visit_yul_block(&mut self, node: &YulBlock) -> Result<bool> {
417 |         self.visit_node(node)
418 |     }
419 |     fn end_visit_yul_block(&mut self, node: &YulBlock) -> Result<()> {
420 |         self.end_visit_node(node)
421 |     }
422 | 
423 |     fn visit_yul_statement(&mut self, node: &YulStatement) -> Result<bool> {
424 |         self.visit_node(node)
425 |     }
426 |     fn end_visit_yul_statement(&mut self, node: &YulStatement) -> Result<()> {
427 |         self.end_visit_node(node)
428 |     }
429 | 
430 |     fn visit_yul_expression(&mut self, node: &YulExpression) -> Result<bool> {
431 |         self.visit_node(node)
432 |     }
433 |     fn end_visit_yul_expression(&mut self, node: &YulExpression) -> Result<()> {
434 |         self.end_visit_node(node)
435 |     }
436 | 
437 |     fn visit_yul_literal(&mut self, node: &YulLiteral) -> Result<bool> {
438 |         self.visit_node(node)
439 |     }
440 |     fn end_visit_yul_literal(&mut self, node: &YulLiteral) -> Result<()> {
441 |         self.end_visit_node(node)
442 |     }
443 | 
444 |     fn visit_yul_identifier(&mut self, node: &YulIdentifier) -> Result<bool> {
445 |         self.visit_node(node)
446 |     }
447 |     fn end_visit_yul_identifier(&mut self, node: &YulIdentifier) -> Result<()> {
448 |         self.end_visit_node(node)
449 |     }
450 | 
451 |     fn visit_yul_function_call(&mut self, node: &YulFunctionCall) -> Result<bool> {
452 |         self.visit_node(node)
453 |     }
454 |     fn end_visit_yul_function_call(&mut self, node: &YulFunctionCall) -> Result<()> {
455 |         self.end_visit_node(node)
456 |     }
457 | 
458 |     fn visit_yul_if(&mut self, node: &YulIf) -> Result<bool> {
459 |         self.visit_node(node)
460 |     }
461 |     fn end_visit_yul_if(&mut self, node: &YulIf) -> Result<()> {
462 |         self.end_visit_node(node)
463 |     }
464 | 
465 |     fn visit_yul_switch(&mut self, node: &YulSwitch) -> Result<bool> {
466 |         self.visit_node(node)
467 |     }
468 |     fn end_visit_yul_switch(&mut self, node: &YulSwitch) -> Result<()> {
469 |         self.end_visit_node(node)
470 |     }
471 | 
472 |     fn visit_yul_case(&mut self, node: &YulCase) -> Result<bool> {
473 |         self.visit_node(node)
474 |     }
475 |     fn end_visit_yul_case(&mut self, node: &YulCase) -> Result<()> {
476 |         self.end_visit_node(node)
477 |     }
478 | 
479 |     fn visit_yul_for_loop(&mut self, node: &YulForLoop) -> Result<bool> {
480 |         self.visit_node(node)
481 |     }
482 |     fn end_visit_yul_for_loop(&mut self, node: &YulForLoop) -> Result<()> {
483 |         self.end_visit_node(node)
484 |     }
485 | 
486 |     fn visit_yul_assignment(&mut self, node: &YulAssignment) -> Result<bool> {
487 |         self.visit_node(node)
488 |     }
489 |     fn end_visit_yul_assignment(&mut self, node: &YulAssignment) -> Result<()> {
490 |         self.end_visit_node(node)
491 |     }
492 | 
493 |     fn visit_yul_variable_declaration(&mut self, node: &YulVariableDeclaration) -> Result<bool> {
494 |         self.visit_node(node)
495 |     }
496 |     fn end_visit_yul_variable_declaration(&mut self, node: &YulVariableDeclaration) -> Result<()> {
497 |         self.end_visit_node(node)
498 |     }
499 | 
500 |     fn visit_yul_typed_name(&mut self, node: &YulTypedName) -> Result<bool> {
501 |         self.visit_node(node)
502 |     }
503 |     fn end_visit_yul_typed_name(&mut self, node: &YulTypedName) -> Result<()> {
504 |         self.end_visit_node(node)
505 |     }
506 | 
507 |     fn visit_yul_expression_statement(&mut self, node: &YulExpressionStatement) -> Result<bool> {
508 |         self.visit_node(node)
509 |     }
510 |     fn end_visit_yul_expression_statement(&mut self, node: &YulExpressionStatement) -> Result<()> {
511 |         self.end_visit_node(node)
512 |     }
513 | 
514 |     fn visit_yul_function_definition(&mut self, node: &YulFunctionDefinition) -> Result<bool> {
515 |         self.visit_node(node)
516 |     }
517 |     fn end_visit_yul_function_definition(&mut self, node: &YulFunctionDefinition) -> Result<()> {
518 |         self.end_visit_node(node)
519 |     }
520 | 
521 |     fn visit_node(&mut self, _node: &impl Node) -> Result<bool> {
522 |         Ok(true)
523 |     }
524 |     fn end_visit_node(&mut self, _node: &impl Node) -> Result<()> {
525 |         Ok(())
526 |     }
527 | 
528 |     fn visit_immediate_children(
529 |         &mut self,
530 |         _node_id: NodeID,
531 |         _node_children_ids: Vec<NodeID>,
532 |     ) -> Result<()> {
533 |         Ok(())
534 |     }
535 | 
536 |     fn visit_node_id(&mut self, _node_id: Option<NodeID>) -> Result<()> {
537 |         Ok(())
538 |     }
539 | }
540 | 
541 | pub trait Node {
542 |     /// [`Node::accept`] is designed to propagate
543 |     fn accept(&self, _visitor: &mut impl ASTConstVisitor) -> Result<()> {
544 |         Ok(())
545 |     }
546 |     /// [`Node::accept_metadata`] is designed to propagate into the AST subtree
547 |     /// although it doesn't happen by itself. [`Node::accept`] triggers the propagation
548 |     fn accept_metadata(&self, _visitor: &mut impl ASTConstVisitor) -> Result<()> {
549 |         Ok(())
550 |     }
551 |     /// [`Node::accept_id`] is not designed to propagate into the AST subtree
552 |     fn accept_id(&self, _visitor: &mut impl ASTConstVisitor) -> Result<()> {
553 |         Ok(())
554 |     }
555 | }
556 | 
557 | pub fn list_accept(list: &Vec<impl Node>, visitor: &mut impl ASTConstVisitor) -> Result<()> {
558 |     for elem in list {
559 |         elem.accept(visitor)?;
560 |     }
561 |     Ok(())
562 | }
563 | 
```

--------------------------------------------------------------------------------
/aderyn_core/src/context/router/tests.rs:
--------------------------------------------------------------------------------

```rust
  1 | #[cfg(test)]
  2 | mod mir_router {
  3 |     use crate::{
  4 |         ast::ASTNode,
  5 |         context::{
  6 |             browser::ExtractFunctionCalls,
  7 |             router::{ECDest, Router},
  8 |             workspace::WorkspaceContext,
  9 |         },
 10 |         test_utils::load_solidity_source_unit,
 11 |     };
 12 | 
 13 |     // Utility function to help debug router.
 14 |     #[allow(dead_code)]
 15 |     pub fn display(router: &Router, context: &WorkspaceContext) {
 16 |         println!("Internal calls");
 17 |         println!("==============");
 18 |         for (base_contract_id, ic) in &router.internal_calls {
 19 |             let Some(ASTNode::ContractDefinition(c)) = context.nodes.get(base_contract_id) else {
 20 |                 eprintln!("Couldn't resolve contract with ID {}", base_contract_id);
 21 |                 return;
 22 |             };
 23 |             println!("Base contract - {}", c.name);
 24 |             for (start_lookup, lookup) in &ic.routes {
 25 |                 let Some(ASTNode::ContractDefinition(s)) = context.nodes.get(start_lookup) else {
 26 |                     eprintln!("Couldn't resolve contract with ID {}", start_lookup);
 27 |                     return;
 28 |                 };
 29 |                 println!("Start lookup - {}", s.name);
 30 |                 for (func_selectorish, def_id) in lookup {
 31 |                     let Some(ASTNode::FunctionDefinition(f)) = context.nodes.get(def_id) else {
 32 |                         eprintln!("Couldn't resolve contract with ID {}", def_id);
 33 |                         return;
 34 |                     };
 35 |                     println!(
 36 |                         "{} - {} - {:?}",
 37 |                         func_selectorish,
 38 |                         f.name,
 39 |                         context.get_node_sort_key_from_capturable(&f.clone().into())
 40 |                     );
 41 |                 }
 42 |             }
 43 |             println!("-------------");
 44 |         }
 45 |     }
 46 | 
 47 |     fn get_ic_router_ctx() -> (Router, WorkspaceContext) {
 48 |         let context =
 49 |             load_solidity_source_unit("../tests/contract-playground/src/router/InternalCalls.sol");
 50 | 
 51 |         (Router::build(&context), context)
 52 |     }
 53 | 
 54 |     fn get_mc_router_ctx() -> (Router, WorkspaceContext) {
 55 |         let context =
 56 |             load_solidity_source_unit("../tests/contract-playground/src/router/ModifierCalls.sol");
 57 | 
 58 |         (Router::build(&context), context)
 59 |     }
 60 | 
 61 |     fn get_ec_router_ctx() -> (Router, WorkspaceContext) {
 62 |         let context =
 63 |             load_solidity_source_unit("../tests/contract-playground/src/router/ExternalCalls.sol");
 64 | 
 65 |         (Router::build(&context), context)
 66 |     }
 67 | 
 68 |     fn get_ec_router_ctx_2() -> (Router, WorkspaceContext) {
 69 |         let context = load_solidity_source_unit(
 70 |             "../tests/contract-playground/src/router/FallbackAndReceiveOverrides.sol",
 71 |         );
 72 | 
 73 |         (Router::build(&context), context)
 74 |     }
 75 | 
 76 |     #[test]
 77 |     pub fn resolves_internal_calls_3() {
 78 |         let (router, context) = get_ic_router_ctx();
 79 | 
 80 |         let basic3_top_contract = context.find_contract_by_name("Basic3Top");
 81 |         let basic3_right_contract = context.find_contract_by_name("Basic3Right");
 82 |         let basic3_left_contract = context.find_contract_by_name("Basic3Left");
 83 |         let basic3_down2_contract = context.find_contract_by_name("Basic3Down2");
 84 |         let basic2_contract = context.find_contract_by_name("Basic2");
 85 |         let basic2_child_contract = context.find_contract_by_name("Basic2Child");
 86 | 
 87 |         let basic3_top_function = basic3_top_contract.find_function_by_name("help");
 88 |         let basic3_top_live = basic3_top_contract.find_function_by_name("live");
 89 |         let basic3_left_function = basic3_left_contract.find_function_by_name("help");
 90 |         let basic2_child_gcall_function = basic2_child_contract.find_function_by_name("gcall");
 91 |         let basic2_g_function = basic2_contract.find_function_by_name("g");
 92 |         let basic2_child_g_function = basic2_child_contract.find_function_by_name("g");
 93 |         let basic3_right_function = basic3_right_contract.find_function_by_name("help");
 94 |         let basic3_down2_function = basic3_down2_contract.find_function_by_name("help");
 95 |         let basic3_down2_live = basic3_down2_contract.find_function_by_name("live");
 96 | 
 97 |         let basic3_top_function_calls = ExtractFunctionCalls::from(basic3_top_function).extracted;
 98 |         let basic3_right_function_calls =
 99 |             ExtractFunctionCalls::from(basic3_right_function).extracted;
100 |         let basic3_left_function_calls = ExtractFunctionCalls::from(basic3_left_function).extracted;
101 |         let basic3_down2_function_calls =
102 |             ExtractFunctionCalls::from(basic3_down2_function).extracted;
103 |         let basic2_child_gcall_function_calls =
104 |             ExtractFunctionCalls::from(basic2_child_gcall_function).extracted;
105 | 
106 |         let a = router
107 |             ._resolve_internal_call(
108 |                 &context,
109 |                 basic3_down2_contract,
110 |                 &basic3_down2_function_calls[0],
111 |             )
112 |             .unwrap();
113 |         assert_eq!(a.id, basic3_right_function.id);
114 | 
115 |         let b = router
116 |             ._resolve_internal_call(&context, basic3_down2_contract, &basic3_top_function_calls[0])
117 |             .unwrap();
118 |         assert_eq!(b.id, basic3_down2_live.id);
119 | 
120 |         let c = router
121 |             ._resolve_internal_call(
122 |                 &context,
123 |                 basic3_down2_contract,
124 |                 &basic3_down2_function_calls[1],
125 |             )
126 |             .unwrap();
127 |         assert_eq!(c.id, basic3_top_live.id);
128 | 
129 |         let d = router
130 |             ._resolve_internal_call(
131 |                 &context,
132 |                 basic3_down2_contract,
133 |                 &basic3_down2_function_calls[2],
134 |             )
135 |             .unwrap();
136 |         assert_eq!(d.id, basic3_left_function.id);
137 | 
138 |         let e = router
139 |             ._resolve_internal_call(
140 |                 &context,
141 |                 basic3_down2_contract,
142 |                 &basic3_right_function_calls[0],
143 |             )
144 |             .unwrap();
145 |         assert_eq!(e.id, basic3_left_function.id);
146 | 
147 |         let f = router
148 |             ._resolve_internal_call(&context, basic3_down2_contract, &basic3_left_function_calls[0])
149 |             .unwrap();
150 |         assert_eq!(f.id, basic3_top_function.id);
151 | 
152 |         let g = router
153 |             ._resolve_internal_call(
154 |                 &context,
155 |                 basic3_right_contract,
156 |                 &basic3_right_function_calls[0],
157 |             )
158 |             .unwrap();
159 |         assert_eq!(g.id, basic3_top_function.id);
160 | 
161 |         assert_eq!(basic2_child_g_function.selectorish(), basic2_g_function.selectorish());
162 |         let h = router
163 |             ._resolve_internal_call(
164 |                 &context,
165 |                 basic2_child_contract,
166 |                 &basic2_child_gcall_function_calls[1],
167 |             )
168 |             .unwrap();
169 |         assert_eq!(h.id, basic2_child_g_function.id);
170 |     }
171 | 
172 |     #[test]
173 |     pub fn resolves_internal_calls_4() {
174 |         let (router, context) = get_ic_router_ctx();
175 | 
176 |         let contract = context.find_contract_by_name("Basic4");
177 |         let main = contract.find_function_by_name("main");
178 |         let priv_func = contract.find_function_by_name("priv");
179 | 
180 |         let library = context.find_contract_by_name("Basic4Lib");
181 |         let lib_help1 = library.find_function_by_name("help1");
182 | 
183 |         let func_calls = ExtractFunctionCalls::from(main).extracted;
184 | 
185 |         // internal calls
186 |         assert_eq!(func_calls[0].is_internal_call(), Some(true));
187 |         assert_eq!(func_calls[1].is_internal_call(), Some(true));
188 |         assert_eq!(func_calls[2].is_internal_call(), Some(true));
189 |         assert_eq!(func_calls[3].is_internal_call(), Some(true));
190 |         assert_eq!(func_calls[4].is_internal_call(), Some(true));
191 | 
192 |         // external calls
193 |         assert_eq!(func_calls[5].is_internal_call(), Some(false));
194 |         assert_eq!(func_calls[6].is_internal_call(), Some(false));
195 |         assert_eq!(func_calls[7].is_internal_call(), Some(false));
196 | 
197 |         let f0 = router._resolve_internal_call(&context, contract, &func_calls[0]);
198 |         let f1 = router._resolve_internal_call(&context, contract, &func_calls[1]);
199 |         let f2 = router._resolve_internal_call(&context, contract, &func_calls[2]);
200 |         let f3 = router._resolve_internal_call(&context, contract, &func_calls[3]);
201 |         let f4 = router._resolve_internal_call(&context, contract, &func_calls[4]);
202 | 
203 |         // Lib calls
204 |         assert_eq!(f0.unwrap().id, lib_help1.id);
205 |         assert_eq!(f1.unwrap().id, lib_help1.id);
206 |         assert_eq!(f2.unwrap().id, lib_help1.id);
207 |         assert_eq!(f3.unwrap().id, lib_help1.id);
208 | 
209 |         // Private funcs
210 |         assert_eq!(f4.unwrap().id, priv_func.id);
211 |     }
212 | 
213 |     #[test]
214 |     pub fn resolves_internal_calls_5() {
215 |         let (router, context) = get_ic_router_ctx();
216 | 
217 |         let free_func = context.find_free_function_by_name("free");
218 |         let basic6_contract = context.find_contract_by_name("Basic6");
219 |         let basic6_function = basic6_contract.find_function_by_name("main");
220 |         let basic6_function_calls = ExtractFunctionCalls::from(basic6_function).extracted;
221 | 
222 |         let a = router
223 |             ._resolve_internal_call(&context, basic6_contract, &basic6_function_calls[0])
224 |             .unwrap();
225 |         assert_eq!(a.id, free_func.id);
226 | 
227 |         let basic7_contract = context.find_contract_by_name("Basic7");
228 |         let basic7_function = basic7_contract.find_function_by_name("main");
229 |         let basic7_function_calls = ExtractFunctionCalls::from(basic7_function).extracted;
230 | 
231 |         let b = router
232 |             ._resolve_internal_call(&context, basic7_contract, &basic7_function_calls[0])
233 |             .unwrap();
234 |         assert_eq!(b.id, free_func.id);
235 | 
236 |         let basic8_contract = context.find_contract_by_name("Basic8");
237 |         let basic8_function = basic8_contract.find_function_by_name("main");
238 |         let basic8_free = basic8_contract.find_function_by_name("free");
239 |         let basic8_function_calls = ExtractFunctionCalls::from(basic8_function).extracted;
240 | 
241 |         let c = router
242 |             ._resolve_internal_call(&context, basic8_contract, &basic8_function_calls[0])
243 |             .unwrap();
244 |         assert_eq!(c.id, basic8_free.id);
245 | 
246 |         let basic9_contract = context.find_contract_by_name("Basic9");
247 |         let basic9_function = basic9_contract.find_function_by_name("help");
248 |         let basic9_function_calls = ExtractFunctionCalls::from(basic9_function).extracted;
249 | 
250 |         let d = router
251 |             ._resolve_internal_call(&context, basic9_contract, &basic9_function_calls[0])
252 |             .unwrap();
253 |         assert_eq!(d.id, basic8_free.id);
254 |     }
255 | 
256 |     #[test]
257 |     pub fn resolve_modifier_calls_1() {
258 |         let (router, context) = get_mc_router_ctx();
259 | 
260 |         let a_contract = context.find_contract_by_name("A");
261 |         let b_contract = context.find_contract_by_name("B");
262 |         let c_contract = context.find_contract_by_name("C");
263 |         let d_library = context.find_contract_by_name("D");
264 | 
265 |         let a_func = a_contract.find_function_by_name("geez");
266 |         let b_func = b_contract.find_function_by_name("tree");
267 |         let c_func = c_contract.find_function_by_name("main");
268 |         let show_func = d_library.find_function_by_name("show");
269 | 
270 |         let a_modifier_call = &a_func.modifiers[0];
271 |         let b_modifier_call = &b_func.modifiers[0];
272 |         let c_modifier_call_1 = &c_func.modifiers[0];
273 |         let c_modifier_call_2 = &c_func.modifiers[1];
274 |         let show_modifier = &show_func.modifiers[0];
275 | 
276 |         let a = router._resolve_modifier_call(&context, b_contract, a_modifier_call).unwrap();
277 |         assert_eq!(a.id, b_contract.find_modifier_by_name("modify").id);
278 | 
279 |         let b = router._resolve_modifier_call(&context, c_contract, c_modifier_call_1).unwrap();
280 |         assert_eq!(b.id, b_contract.find_modifier_by_name("modify").id);
281 | 
282 |         let c = router._resolve_modifier_call(&context, c_contract, c_modifier_call_2).unwrap();
283 |         assert_eq!(c.id, c_contract.find_modifier_by_name("modify").id);
284 | 
285 |         let d = router._resolve_modifier_call(&context, b_contract, b_modifier_call).unwrap();
286 |         assert_eq!(d.id, b_contract.find_modifier_by_name("modify").id);
287 | 
288 |         let e = router._resolve_modifier_call(&context, c_contract, show_modifier).unwrap();
289 |         assert_eq!(e.id, d_library.find_modifier_by_name("modify").id);
290 |     }
291 | 
292 |     #[test]
293 |     pub fn resolves_internal_from_library_calls() {
294 |         let (router, context) = get_ic_router_ctx();
295 | 
296 |         let basic4_contract = context.find_contract_by_name("Basic4");
297 |         let basic4_lib = context.find_contract_by_name("Basic4Lib");
298 |         let basic4_aux_lib = context.find_contract_by_name("Basic4AuxLib");
299 |         let help1_func = basic4_lib.find_function_by_name("help1");
300 |         let ext2_func = basic4_lib.find_function_by_name("ext2");
301 |         let aux2 = basic4_aux_lib.find_function_by_name("aux2");
302 |         let func_calls = ExtractFunctionCalls::from(help1_func).extracted;
303 | 
304 |         assert!(func_calls[0].is_internal_call().unwrap());
305 |         assert!(!func_calls[1].is_internal_call().unwrap());
306 |         assert!(func_calls[2].is_internal_call().unwrap());
307 | 
308 |         let a = router._resolve_internal_call(&context, basic4_contract, &func_calls[0]).unwrap();
309 |         assert_eq!(a.id, ext2_func.id);
310 | 
311 |         let b = router._resolve_internal_call(&context, basic4_contract, &func_calls[2]).unwrap();
312 |         assert_eq!(b.id, aux2.id);
313 | 
314 |         // external calls return none
315 |         let c = router._resolve_internal_call(&context, basic4_contract, &func_calls[1]);
316 |         assert!(c.is_none());
317 |     }
318 | 
319 |     #[test]
320 |     pub fn resolve_ext_calls_1() {
321 |         let (router, context) = get_ec_router_ctx();
322 | 
323 |         let test_contract = context.find_contract_by_name("TestA");
324 |         let test_func = test_contract.find_function_by_name("test");
325 |         let func_calls = ExtractFunctionCalls::from(test_func).extracted;
326 | 
327 |         assert_eq!(func_calls[0].is_internal_call(), Some(false));
328 | 
329 |         let b_contract = context.find_contract_by_name("B");
330 |         let out = router._resolve_external_call(&context, b_contract, &func_calls[0]).unwrap();
331 |         assert!(matches!(out, ECDest::PseudoExtFn(_)));
332 | 
333 |         let e_contract = context.find_contract_by_name("E");
334 |         let e_func = e_contract.find_function_by_name("abc");
335 |         let out = router._resolve_external_call(&context, e_contract, &func_calls[0]).unwrap();
336 |         assert_eq!(out, ECDest::RealExtFn(e_func.id));
337 | 
338 |         let f_contract = context.find_contract_by_name("F");
339 |         let f_func = f_contract.find_function_by_name("abc");
340 |         let out = router._resolve_external_call(&context, f_contract, &func_calls[0]).unwrap();
341 |         assert_eq!(out, ECDest::PublicFn(f_func.id));
342 | 
343 |         let y_contract = context.find_contract_by_name("Y");
344 |         let out = router._resolve_external_call(&context, y_contract, &func_calls[0]).unwrap();
345 |         assert_eq!(out, ECDest::PublicFn(f_func.id));
346 |     }
347 | 
348 |     #[test]
349 |     pub fn resolve_ext_calls_2() {
350 |         let (router, context) = get_ec_router_ctx();
351 | 
352 |         let test_contract = context.find_contract_by_name("TestD");
353 |         let test_func = test_contract.find_function_by_name("test");
354 |         let func_calls = ExtractFunctionCalls::from(test_func).extracted;
355 | 
356 |         assert_eq!(func_calls[0].is_internal_call(), Some(false));
357 | 
358 |         let d_contract = context.find_contract_by_name("D");
359 |         let out = router._resolve_external_call(&context, d_contract, &func_calls[0]).unwrap();
360 |         assert!(matches!(out, ECDest::PseudoExtFn(_)));
361 |     }
362 | 
363 |     #[test]
364 |     pub fn resolve_ext_calls_3() {
365 |         let (router, context) = get_ec_router_ctx_2();
366 | 
367 |         let test_contract = context.find_contract_by_name("TestIt");
368 |         let test_func = test_contract.find_function_by_name("test");
369 |         let func_calls = ExtractFunctionCalls::from(test_func).extracted;
370 | 
371 |         assert_eq!(func_calls[0].is_internal_call(), Some(false));
372 | 
373 |         let a_contract = context.find_contract_by_name("A");
374 |         let b_contract = context.find_contract_by_name("B");
375 |         let c_contract = context.find_contract_by_name("C");
376 | 
377 |         let a_fallback = a_contract.find_fallback_function();
378 |         let b_fallback = b_contract.find_fallback_function();
379 | 
380 |         // resolve fallback functions
381 |         let out = router._resolve_external_call(&context, a_contract, &func_calls[0]).unwrap();
382 |         assert_eq!(out, ECDest::Fallback(a_fallback.id));
383 | 
384 |         let out = router._resolve_external_call(&context, b_contract, &func_calls[0]).unwrap();
385 |         assert_eq!(out, ECDest::Fallback(b_fallback.id));
386 | 
387 |         let out = router._resolve_external_call(&context, c_contract, &func_calls[0]).unwrap();
388 |         assert_eq!(out, ECDest::Fallback(a_fallback.id));
389 |     }
390 | 
391 |     #[test]
392 |     pub fn resolve_ext_calls_4() {
393 |         let (router, context) = get_ec_router_ctx_2();
394 | 
395 |         let a_contract = context.find_contract_by_name("A");
396 |         let b_contract = context.find_contract_by_name("B");
397 |         let c_contract = context.find_contract_by_name("C");
398 | 
399 |         let a_fallback = a_contract.find_fallback_function();
400 |         let a_receive = a_contract.find_receive_function();
401 |         let b_fallback = b_contract.find_fallback_function();
402 | 
403 |         // resolve fallback functions
404 |         let out = router._resolve_fallback_function(&context, a_contract).unwrap();
405 |         assert_eq!(out.id, a_fallback.id);
406 | 
407 |         let out = router._resolve_fallback_function(&context, b_contract).unwrap();
408 |         assert_eq!(out.id, b_fallback.id);
409 | 
410 |         let out = router._resolve_fallback_function(&context, c_contract).unwrap();
411 |         assert_eq!(out.id, a_fallback.id);
412 | 
413 |         // resolve receive
414 |         let out = router._resolve_receive_function(&context, a_contract).unwrap();
415 |         assert_eq!(out.id, a_receive.id);
416 | 
417 |         let out = router._resolve_receive_function(&context, b_contract).unwrap();
418 |         assert_eq!(out.id, a_receive.id);
419 | 
420 |         let out = router._resolve_receive_function(&context, c_contract).unwrap();
421 |         assert_eq!(out.id, a_receive.id);
422 |     }
423 | 
424 |     #[test]
425 |     pub fn resolve_ext_calls_5() {
426 |         let (_, context) = get_ec_router_ctx_2();
427 | 
428 |         let a_contract = context.find_contract_by_name("A");
429 |         let b_contract = context.find_contract_by_name("B");
430 |         let c_contract = context.find_contract_by_name("C");
431 | 
432 |         let a_funcs = context.entrypoint_functions(a_contract).unwrap();
433 |         let b_funcs = context.entrypoint_functions(b_contract).unwrap();
434 |         let c_funcs = context.entrypoint_functions(c_contract).unwrap();
435 | 
436 |         assert_eq!(a_funcs.len(), 2);
437 |         assert_eq!(b_funcs.len(), 2);
438 |         assert_eq!(c_funcs.len(), 2);
439 |     }
440 | 
441 |     #[test]
442 |     pub fn resolve_ext_calls_6() {
443 |         let (_, context) = get_ec_router_ctx();
444 | 
445 |         let b_contract = context.find_contract_by_name("B");
446 |         let e_contract = context.find_contract_by_name("E");
447 |         let f_contract = context.find_contract_by_name("F");
448 |         let y_contract = context.find_contract_by_name("Y");
449 |         let d_contract = context.find_contract_by_name("D");
450 | 
451 |         let b_funcs = context.entrypoint_functions(b_contract).unwrap();
452 |         let e_funcs = context.entrypoint_functions(e_contract).unwrap();
453 |         let f_funcs = context.entrypoint_functions(f_contract).unwrap();
454 |         let y_funcs = context.entrypoint_functions(y_contract).unwrap();
455 |         let d_funcs = context.entrypoint_functions(d_contract).unwrap();
456 | 
457 |         assert_eq!(b_funcs.len(), 0);
458 |         assert_eq!(e_funcs.len(), 1);
459 |         assert_eq!(f_funcs.len(), 1);
460 |         assert_eq!(y_funcs.len(), 1);
461 |         assert_eq!(d_funcs.len(), 0);
462 |     }
463 | }
464 | 
```
Page 95/103FirstPrevNextLast